社区讨论

WA10 求调

P9750[CSP-J 2023] 一元二次方程参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mhizv83r
此快照首次捕获于
2025/11/03 18:25
4 个月前
此快照最后确认于
2025/11/03 18:25
4 个月前
查看原帖
CPP
#include<bits/stdc++.h>
#define int long long
using namespace std;
int t,m;
int gcd(int a,int b){
	if(b==0)return a;
	return gcd(b,a%b);
}
signed main(){
	cin>>t>>m;
	while(t--){
		int a,b,c;
		cin>>a>>b>>c;
		int d=b*b-4*a*c;
		if(d<0)cout<<"NO";
		else{
			int fmz=2*a,fmg=2*a,fzz=-b,fzg=1;
			for(int i=2;i*i<=d;i++)if(d%(i*i)==0)fzg=i;
			d/=fzg*fzg;
			int g1=gcd(fmz,fzz),g2=gcd(fmg,fzg);
			fmz/=g1;
			fzz/=g1;
			fmg/=g2;
			fzg/=g2;
			if(fmz<0){
				fmz=abs(fmz);
				fzz=-fzz;
			}
			if(fmg<0){
				fmg=abs(fmg);
				fzg=-fzg;
			}
			if(d==0){
				if(fmz==1)cout<<fzz;
				else{
					if(fzz==0)cout<<0;
					else cout<<fzz<<"/"<<fmz; 
				}
			}
			else if(d==1){
				int fm=fmg*fmz,fz=fzg*fmz+fzz*fmg;
				int g=gcd(fm,fz);
				fm/=g;
				fz/=g;
				if(fm<0){
					fm=abs(fm);
					fz=-fz;
				}
				if(fm==1)cout<<fz;
				else{
					if(fz==0)cout<<0;
					else cout<<fz<<"/"<<fm;
				}
			}
			else{
				if(fmz==1&&fzz!=0)cout<<fzz<<"+";
				else if(fzz!=0)cout<<fzz<<"/"<<fmz<<"+";
				if(fzg==1)cout<<"sqrt("<<d<<")";
				else cout<<fzg<<"*sqrt("<<d<<")";
				if(fmg!=1)cout<<"/"<<fmg;
			}
		}
		cout<<'\n';
	}
	return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...