灵异事件!求调!
查看原帖
灵异事件!求调!
1305692
xiangixuan楼主2024/9/26 20:03
#include<bits/stdc++.h>
using namespace std;
int T, M;
void _sqrt(int n, int &a,int &b){
	for(int i=sqrt(n); i>1; i--)
		if(n%(i*i)==0){
			a=i, b=n/(i*i);
			return;
		}
	a=1, b=n;
}
void _plus(int &n, int &m, int a, int b, int c, int d){
	int gcd=1;
	for(int i=min(abs(b), abs(d)); i>=2; i--){
		if(b%i==0&&d%i==0) {
			gcd=i;
			break;
		}
	}
	n=a*(b*d/gcd)/b+c*(b*d/gcd)/d;
	m=b*d/gcd;
}
void _simp(int &a, int &b){
	int gcd=1;
	for(int i=min(abs(a), abs(b)); i>=2; i--){
		if(a%i==0&&b%i==0) {
			gcd=i;
			break;
		}
	}
	a/=gcd, b/=gcd;
	if((a<0&&b<0)||(a>0&&b<0)) a=-a, b=-b;
}
int main(){
	cin >> T >> M;
	while(T--){
		int a, b, c;
		cin >> a >> b >> c;
		int delta=b*b-4*a*c;
		if(delta<0){
			cout << "NO" << '\n';
			continue;
		}
		string ans;
		int A, B, C, D, E;
		_sqrt(delta, C, D);
		B=E=2*a, A=-b;
		E=abs(E);
		_simp(A, B);
		_simp(C, E);
		if(D!=1){
			if(A!=0){
				cout << A;
				if(B!=1) cout << '/' << B;
				if(C!=0&&D!=0) cout << '+';
			}
			if(C!=0&&D!=0){
				if(C!=1) cout << C << '*';
				cout << "sqrt(" << D << ')';
				if(C==1&&D==1) cout << 1;
				if(E!=1) cout << '/' << E;
			}
			if(A==0&&(C==0||D==0)) cout << 0;
		}else {
			int F, G;
			_plus(F, G, A, B, C*D, E);
			_simp(F, G);
			cout << F;
			if(G!=1) cout << '/' << G;
		}
		cout << '\n';
	}
	return 0;
}

输出完全一样,但Too Long On Line过不了

2024/9/26 20:03
加载中...