60分求调,样例过了,WA on #2,4,9,10
查看原帖
60分求调,样例过了,WA on #2,4,9,10
747732
sunpengyu楼主2024/10/2 09:19

不知道是哪里判断有漏下

#include <bits/stdc++.h>
using namespace std;
#define int long long
int T,M,a,b,c;
signed main(){
	cin>>T>>M;
	while(T--){
		cin>>a>>b>>c;
		if(a<0) a=-a,b=-b,c=-c;
		int delta=b*b-4*a*c;
		if(delta<0){
			cout<<"NO"<<endl;
			continue;
		}
		if((int)sqrt(delta)*(int)sqrt(delta)==delta){
			int fz=-b+sqrt(delta),fm=2*a;
			int g=__gcd(fz,fm);
			fz/=g,fm/=g;
			if(fz==0) cout<<0<<endl;
			else if(fm==-1) cout<<-fz<<endl;
			else if(fm==1) cout<<fz<<endl;
			else if(fm<0&&fz<0) cout<<-fz<<"/"<<-fm<<endl;
			else if(fm<0&&fz>0) cout<<-fz<<"/"<<-fm<<endl;
			else cout<<fz<<"/"<<fm<<endl;
		}else{
			int fz=-b,fm=2*a;
			int g=__gcd(fz,fm);
			fz/=g,fm/=g;
			if(fz==0);
			else if(fm==-1) cout<<-fz;
			else if(fm==1) cout<<fz;
			else if(fm<0&&fz<0) cout<<-fz<<"/"<<-fm;
			else if(fm<0&&fz>0) cout<<-fz<<"/"<<-fm;
			else cout<<fz<<"/"<<fm;
			fm=2*a;
			int sum=1;
			for(int i=2;i*i<=delta;i++){
				while(delta%(i*i)==0){
					delta/=(i*i);
					sum*=i;
				}
			}
			if(sum==1){
				cout<<"+sqrt("<<delta<<")/2"<<endl;
			}else{
				if(delta==1){
					if(sum%fm==0){
						cout<<sum/fm<<endl;
					}else{
						sum/=(__gcd(sum,fm));
						fm/=(__gcd(sum,fm));
						if(sum==0);
						else if(fm==-1){
							if(-sum>0) cout<<"+"<<-sum<<endl;
							else cout<<"+"<<sum<<endl;
						}
						else if(fm==1){
							if(sum>0) cout<<"+"<<sum<<endl;
							else cout<<"+"<<-sum<<endl;
						}
						else if(fm<0&&sum<0) cout<<"+"<<-sum<<"/"<<-fm<<endl;
						else if(fm<0&&sum>0) cout<<-sum<<"/"<<-fm<<endl;
						else cout<<sum<<"/"<<fm<<endl;
					}
				}else{
					if(sum%fm==0){
						cout<<sum/fm<<"*sqrt("<<delta<<")"<<endl;
					}else{
						int g=__gcd(sum,fm);
						sum/=g;
						fm/=g;
						if(sum==0) cout<<0<<endl;
						else if(sum==1) cout<<"+sqrt("<<delta<<")/"<<fm<<endl;
						else if(sum==-1) cout<<"-sqrt("<<delta<<")/"<<fm<<endl;
						/*else if(fm==-1&&sum==1) cout<<"-*sqrt("<<delta<<")"<<endl;
						else if(fm==-1&&sum==-1) cout<<"*sqrt("<<delta<<")"<<endl;*/
						else if(fm==-1&&sum!=1&&sum!=-1) cout<<"+"<<-sum<<"*sqrt("<<delta<<")"<<endl;
						/*else if(fm==1&&sum==1) cout<<"*sqrt("<<delta<<")"<<endl;
						else if(fm==1&&sum==-1) cout<<"-*sqrt("<<delta<<")"<<endl;*/
						else if(fm==1&&sum!=1&&sum!=-1) cout<<"+"<<sum<<"*sqrt("<<delta<<")"<<endl;
						else if(fm<0&&sum<0) cout<<"+"<<-sum<<"*sqrt("<<delta<<")"<<"/"<<-fm<<endl;
						else if(fm<0&&sum>0) cout<<"+"<<-sum<<"*sqrt("<<delta<<")"<<"/"<<-fm<<endl;
						else cout<<"+"<<sum<<"*sqrt("<<delta<<")"<<"/"<<fm<<endl;
					}
				}
			}
		}
	}
	return 0;
}

提交记录

2024/10/2 09:19
加载中...