RE求条
查看原帖
RE求条
1433474
Meng_Xiangyu楼主2024/10/23 19:50
#include<bits/stdc++.h>
using namespace std;
#define fst ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);

inline bool print(int x,int y,bool fl){
	if(x==0 || y==0){
		if(fl){
			cout << 0;
		}
		return 1;
	}
	if((x>0) ^ (y>0)){
		cout << "-";
		x=-x;
	}
	int gcd=__gcd(x,y);
	if(gcd==y){
		cout << x/gcd;
		return 0;
	}
	cout << x/gcd << '/' << y/gcd;
}

inline void code(){
	register int a,b,c;
	cin >> a >> b >> c;
	register int delta=b*b-4*a*c,k=1;
	if(delta<0){
		cout << "NO\n";
		return;
	}
	/*               _______
	          -b + \/ delta
	cout <<  ________________
	
	               2a
	*/
	int x=sqrt(delta);
	// cout << delta << endl;
	for(register int i=2;i*i<=delta;i++){
		if(delta%(i*i)==0){
			k*=i;
			delta/=i*i;
			i--;
		}
	}
	if(delta==1 || delta==0){
		if(2*a<0){
			print(-b-x,2*a,1);
			cout << endl;
			return;
		}
		print(-b+x,2*a,1);
		cout << endl;
		return;
	}else{
		if(print(-b,2*a,0)){
			if(2*a<0){
				a=-a;
				register int gcd=__gcd(2*a,k);
				if(gcd==2*a){
					if(k/gcd!=1){
						cout << k/gcd << '*';
					}
					cout << "sqrt(" << delta << ")\n";
					return;
				}
				if(k/gcd!=1){
					cout << k/gcd << '*';
				}
				cout << "sqrt(" << delta << ")/" << 2*a/gcd << endl;
				return;
			}
			register int gcd=__gcd(2*a,k);
			if(gcd==2*a){
				if(k/gcd!=1)
					cout << k/gcd << '*';
				cout << "sqrt(" << delta << ")\n";
				return;
			}
			if(k/gcd!=1){
				cout << k/gcd << '*';
			}
			cout << "sqrt(" << delta << ")/" << 2*a/gcd << endl;
		}else{
			if(2*a<0){
				a=-a;
				register int gcd=__gcd(2*a,k);
				if(gcd==2*a){
					cout << '+';
					if(k/gcd!=1){
						cout << k/gcd << '*';
					}
					cout << "sqrt(" << delta << ")\n";
					return;
				}
				cout << '+';
				if(k/gcd!=1){
					cout << k/gcd << '*';
				}
				cout << "sqrt(" << delta << ")/" << 2*a/gcd << endl;
				return;
			}
			register int gcd=__gcd(2*a,k);
			cout << '+';
			if(gcd==2*a){
				if(k/gcd!=1)
					cout << k/gcd << '*';
				cout << "sqrt(" << delta << ")\n";
				return;
			}
			if(k/gcd!=1){
				cout << k/gcd << '*';
			}
			cout << "sqrt(" << delta << ")/" << 2*a/gcd << endl;
		}
	}
}

signed main(){
	fst
	register int t,m;
	cin >> t >> m;
	while(t--){
		code();
	}
	return 0;
}
2024/10/23 19:50
加载中...