首页 > 其他分享 >[CSP-J 2023] 一元二次方程(模拟)

[CSP-J 2023] 一元二次方程(模拟)

时间:2024-10-26 13:18:01浏览次数:8  
标签:题目 因数分解 int fz CSP 一元二次方程 2023 aabs fm

变态的大模拟……

洛谷题目传送门icon-default.png?t=O83Ahttps://www.luogu.com.cn/problem/P9750

解题思路

主要还是模拟,题目让你求啥你就求啥,要注意细节。

然后化简根式的可以用质因数分解一下即可。

代码

#include<bits/stdc++.h>
using namespace std;
#define int long long
int q,n;
int aabs(int x)//绝对值 
{
	if(x<0)return -x;
	return x;
}
int cnt[1001];
int delta;
int qpow(int a,int b)//快速幂 
{
	int res=1;
	while(b)
	{
		if(b&1)
			res*=a;
		a*=a;
		b>>=1; 
	}
	return res;
}
int calc(int del)//质因数分解化简根式 
{
	memset(cnt,0,sizeof cnt);
	int res=1;
	int temp=del;
	vector<int> ttt;
	for(int i=2;i<=temp;i++)
	{
		if(temp%i==0)
		{
			while(temp%i==0)
			{
				cnt[i]++;
				temp/=i;
				
			}
			ttt.push_back(i);
		}
	}
	del=1;
	for(auto i:ttt)
	{
		if(cnt[i]%2)//处理分解的因数 
		{
			del*=i;
			cnt[i]--;
		}
		if(cnt[i]%2==0)
		{
			res*=qpow(i,cnt[i]/2);
		}
	}
	delta=del;
	return res;
}
signed main()
{
//	freopen("P9750_4.in","r",stdin);
//	freopen("aa.out","w",stdout);
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	
	cin>>q>>n;
	int a,b,c;
	int temp,fz,fm,g;
	int fz2,fm2;
	int q1,q2,r;
	while(q--)
	{
		cin>>a>>b>>c;
		delta=b*b-4*a*c;
		if(delta<0)//delta小于0,无解 
		{
			cout<<"NO"<<endl;
			continue;
		}
		temp=sqrt(delta);
		if(temp*temp==delta)//若有有理数解 
		{
			fz=-b+temp;
			fz2=-b-temp;
			fm=2*a;
			if(fz2*fm>fz*fm)//题目说了,要取较大的解 
				fz=fz2;
			g=__gcd(aabs(fz),aabs(fm));
			fz/=g;
			fm/=g;
			if(aabs(fm)==1)
			{
				if(fz*fm>=0)
					cout<<aabs(fz);
				else
					cout<<"-"<<aabs(fz);
			}
				
			else{
				if(fz*fm<0)
					cout<<"-"<<aabs(fz)<<"/"<<aabs(fm);
				else
					cout<<aabs(fz)<<"/"<<aabs(fm);
			}
		}
		else{//没有有理数解 
			fz=-b;
			fm=2*a;
			g=__gcd(aabs(fz),aabs(fm));
			fz/=g;
			fm/=g;
			if(fz)
			{
				if(aabs(fm)==1)
				{
					if(fz*fm>0)
						cout<<aabs(fz);
					else
						cout<<"-"<<aabs(fz);
				}
				
				else{
					if(fz*fm<0)
						cout<<"-"<<aabs(fz)<<"/"<<aabs(fm);
					else
						cout<<aabs(fz)<<"/"<<aabs(fm);
				}
				cout<<"+";
			}
			
			q2=calc(delta);
			double t=q2/double(2*a);
			int t2=t;
			if(t-t2==0)
			{
				if(aabs(t2)==1)
					cout<<"sqrt("<<delta<<")";
				else
					cout<<aabs(t2)<<"*sqrt("<<delta<<")";
			}
			else
			{
				t=1/t;
				t2=t;
				if(t-t2==0)
					cout<<"sqrt("<<delta<<")/"<<aabs(t2);
				else{
					fz=q2;
					fm=2*a;
					g=__gcd(aabs(fz),aabs(fm));
					fz/=g;
					fm/=g;
					if(aabs(fz)==1)
					{
						cout<<"sqrt("<<delta<<")/"<<aabs(fm);
					 } 
					else
						cout<<aabs(fz)<<"*sqrt("<<delta<<")/"<<aabs(fm);
				}
			}
		}
		cout<<endl;
	}
}

最后,祝各位大佬 csp2024 rp++!

标签:题目,因数分解,int,fz,CSP,一元二次方程,2023,aabs,fm
From: https://blog.csdn.net/2403_87021226/article/details/143241397

相关文章

  • CSP-S可能出现的模板(手抄版)
    CSP-Srp+++++++++++ǰ����ʾ,��ƪ���´���ע��~��ѧ������intksm(inta,intb,intp){intret=1;while(b){if(b&1)ret=(ret*a)%p;a=(a*a)%p;b=b>>1;}returnret;}//b��λö�������λΪ1�������aÿ��a�˷�Lucasint......
  • 鲜花-CSP2024 游记
    前言坐标\(\text{SX}\),去年\(\text{CSP}\)和\(\text{NOIP}\)都爆炸了,于是这就是我最后一年了。初赛赛前随便做了三份题,可以随便过线就放下不管了。赛时光速写完选择,然后被状压题硬控,没太看懂在求什么,有点慌乱,后面的完善程序二分题很快写上去了,但是\(K\)短路完全没学过,......
  • CSP 考前注意事项
    考试策略J组争取在\(10:00\)之前把所有题目稳定拿下。如果有题目没有思路、比较难写还没调出来或者想不出来,那么可以先放着,跳题。把其他所有题打完之后写个对拍,挂后台一直拍着。然后剩下的2h内先去上个厕所,洗把冷水脸,放松一下,吃个巧克力,全力去冲没写出来的题目。如果\(10......
  • 2024 CSP-J1 游记
    补一篇游记罢。现在是\(2024.10.25.22:07:10\)。明天恰好是第二轮,hyy他们在日照已经试完机了罢。悲。Day-?暑假学复赛似乎学了不少?但写的那几篇学习笔记貌似都忘干净了。。。Day-7—0开学了。老师超级严,天天布置背诵任务让晚上打卡,没空卷OI。听说tzyz有mx模拟赛,但是......
  • CSP-S 2024 游记 / 游寄
    Day\(-\texttt{?}\)中午地点:机房。新的赛季从初赛开始。说实话,打心底没重视初赛。中午在机房听说早上J组送分送到家了,水到飞起。考后第一时间QQ群就传出来的偷拍版真题?某机构泄题的?重生之监考老师是我宿管?罚坐之考场上偷拍监考老师发呆?……没啥波澜,不做评价。下午地点:......
  • CSP2024: 给小朋友们
    竞赛对文化课:标签化分治思想自信竞赛对大学超出同龄人的见识,思维的广度认识更多的人提前打CCPC,ICPC,对以后发展有帮助强者恒强?:滚雪球结语著名\(\texttt{OIer}\)Froggy在他的签名中写道:最初的一步,泪水之后再一次,雕刻的风景线,消逝在黄昏中的风,直到梦的最后。竞赛,......
  • CSP-S 可能出现的模板(非原创,各个地方整理得)
    CSP-Srp+++++++++++数据结构~01trie~intt[N*31][2],nv=1;voidbuild(intp,intd,intv){ boolflag=(v&(1<<d)); if(!t[p][flag])t[p][flag]=++nv; if(d)build(t[p][flag],d-1,v);}intquery(intp,intd,intv){ if(d<0)return0; boolflag=(v&am......
  • 2024CSP游记
    2024CSP游记众所周知,2024CSP第二轮非专业组能力等级认证将于2024.10.26(星期六)举行关于本人初中生,今年第一次参加CSP的复赛。赛前赛前一星期,教练让我们每天都到机房训练,整整一星期。文化课pass作业pass共做10+套模拟出行状况&&时间线本人坐标ZJ,考点在杭州师范大学(下沙校......
  • The 2023 CCPC (Qinhuangdao) Onsite / The 2nd Universal Cup. Stage 9: Qinhuangdao
    B.YetAnotherSubsequenceProblem题意:按照给定方式生成01串,求本质不同子序列个数,生成方式可以理解为从\((0,0)\)沿折线走到\((A,B)\),若在折线上方或在折线上,就往右走(\(0\)),否则往上走(\(1\))。套路地设\(f_{i,0/1}\)前\(i\)个数以\(0/1\)结尾的不同子序列个数,显然可......
  • CSP2024 游记 - 未完
    CSP2024游记\[written\by:\mathbb{CMRHHH}\]此时:2024/10/25;18:30;路途颠簸,作业先不写了吧……有些晕了,正在听杰伦的仙乐;CCF真长策,赚得英雄尽白头,转眼已是第三年征战CSP-S了。当年一起打的同学都还在打啊,初赛去北师大附中的时候碰到了想碰到的两位巨佬——一尊去了温中......