70分RE求调
查看原帖
70分RE求调
858267
lizi6666楼主2024/8/27 18:58

不合逻辑的RE我真的调不出来了!!!

#include<bits/stdc++.h>
using namespace std;
int n,m,a,b,c;
int huajian(int a){
	int i=a;
	while(i>1){
		if(!(a%(i*i)))break;
		i--;
	}
	return i;
}
signed main(){
//freopen("1.in","r",stdin);
//freopen("ans.out","w",stdout);
	cin>>n>>m;
	while(n--){
		cin>>a>>b>>c;
		int delta=b*b-4*a*c;
		if(delta<0){
			cout<<"NO"<<endl;
			continue;
		}
		if(a<0){a=(-1)*a,b=(-1)*b,c=(-1)*c;}
		delta=b*b-4*a*c;
		int sq=sqrt(delta);
		if(sq*sq==delta){
			int x=-b+sq;
			if(x*a<0)cout<<"-";
			x=abs(x);
			a=abs(a);
			int gcd=__gcd(x,2*a);
			if(2*a==gcd)cout<<x/gcd<<endl;
			else cout<<x/gcd<<"/"<<2*a/gcd<<endl;
		}else{
			sq=huajian(delta);
			int d;
			if(sq!=0)d=delta/sq/sq;
			else d=delta;
			if((-b)*a<0)cout<<"-";
			b=abs(b);
			if(b!=0){
				int gcd=__gcd(b,2*a);
				if(gcd==(2*a))cout<<b/gcd;
				else cout<<b/gcd<<"/"<<2*a/gcd;
				cout<<"+";
			}
			int gcd=__gcd(sq,2*a);
			if(gcd==(2*a)){
				if(sq/gcd==1)cout<<"sqrt("<<d<<")"<<endl;
				else cout<<sq/gcd<<"*sqrt("<<d<<")"<<endl;
			}
			else{
				if(sq/gcd==1)cout<<"sqrt("<<d<<")/"<<2*a/gcd<<endl;
				else cout<<sq/gcd<<"*sqrt("<<d<<")/"<<2*a/gcd<<endl;
			}
		}
	}
	return 0;
}
2024/8/27 18:58
加载中...