50pts求助
查看原帖
50pts求助
827873
abc1856896楼主2024/10/21 16:33
#include<bits/stdc++.h>
#define int long long
int T,M;
void write(int k1,int k2) {
	if(k1%k2==0) {
		std::cout<<k1/k2;
		return;
	}
	int gcd=std::__gcd(k1,k2);
	k1/=gcd;
	k2/=gcd;
	//cout<<k1<<" "<<k2;
	if(k1<0 && k2<0) {
		k1=-k1,k2=-k2;
	}
	if(k1>0 && k2<0) {
		k1=-k1;
		k2=-k2;
	}
	std::cout<<k1<<"/"<<k2;
}
void solve() {
	int a,b,c;
	std::cin>>a>>b>>c;
	int k=b*b-4*a*c;
	if(k<0) {
		std::cout<<"NO\n";
		return;
	}
	if(k==0) {
		int k1=-1*b;
		int k2=2*a;
		write(k1,k2);
		std::cout<<std::endl; 
		return;
	}
	if(k>0){
		int p=sqrt(k);
		if(p*p==k) {
			double k1=(-1*b+p)/(2*a);
			double k2=(-1*b-p)/(2*a);
			if(k1>k2) {
				write(-1*b+p,2*a);
				std::cout<<std::endl;
			}
			else {
				write(-1*b-p,2*a);
				std::cout<<std::endl;
			}
			return;
		}
		else {
			if(b!=0) {
				write(-b,2*a);
				std::cout<<"+";
			}
			int k1=0;
			for(int i=p+1;i>=2;i--) {
				if(k%(i*i)==0) {
					k1=i;
					break;	
				}
			}
			if(a<0) a=-a;
			if(k1==0) {
				std::cout<<"sqrt("<<k<<")/"<<2*a<<std::endl;
				return;
			}
			else {
				int gcd=std::__gcd(k1,2*a);
				if(gcd==1) {
					std::cout<<k1<<"*sqrt("<<k/k1/k1<<")/"<<2*a<<std::endl;
					return;
				}
				else {
					if(k1!=gcd) std::cout<<k1/gcd<<"*sqrt("<<k/k1/k1<<")";
					else std::cout<<"sqrt("<<k/k1/k1<<")";
					if(2*a!=gcd) std::cout<<"/"<<2*a/gcd;
					std::cout<<std::endl;
					return;
				}
			}
		} 
	}
}
signed main(){
	std::cin>>T>>M;
	while(T--) {
		solve();
	}
	return 0;
}

WA on 2,4,6,9,10

2024/10/21 16:33
加载中...