70pts,WA on#1#2#9,求条
查看原帖
70pts,WA on#1#2#9,求条
560112
__Alexander__楼主2024/7/22 15:33
#include<bits/stdc++.h>
#define int long long
using namespace std;
inline int read(){
	int x=0,y=1;
	char c=getchar();
	while(c<'0'||c>'9'){
		if(c=='-')y=-1;
		c=getchar();
	}
	while(c>='0'&&c<='9')x=(x<<3)+(x<<1)+c-'0',c=getchar();
	return x*y;
}
int T,M,a,b,c,delta;
int gcd(int a,int b){
	if(b==0)return a;
	return gcd(b,a%b);
}
signed main(){
	cin>>T>>M;
	while(T--){
		cin>>a>>b>>c;
		delta=b*b-4*a*c;
		if(delta<0){
			cout<<"NO"<<endl;
		}
        else if(delta==0){
			int p=-b,q=2*a;
			int pq=gcd(abs(q),abs(p));
			p/=pq,q/=pq;
			if(q<0)q=-q,p=-p;
			if(q==1) cout<<p<<endl;
			else cout<<p<<"/"<<q<<endl;
		}
        else{
			int p=-b,q=2*a;
			int sq=(int)sqrt(delta);
			if(sq*sq==delta){
				if(q>0)p+=sq;
				else p-=sq;
				int pq=gcd(abs(q),abs(p));
				p/=pq,q/=pq;
				if(q<0)q=-q,p=-p;
				if(q==1) cout<<p<<endl;
			    else cout<<p<<"/"<<q<<endl;
			}
            else{
				int pq=gcd(abs(q),abs(p));
				p/=pq,q/=pq;
				if(q<0)q=-q,p=-p;
				if(p!=0){
					if(q==1) cout<<p<<endl;
			        else cout<<p<<"/"<<q<<endl;
				}
				q=abs(2*a);
				p=1;
				int t=0;
				for(int r=sq;r>=1;r--)
					if(delta%(r*r)==0){
						p*=r;
						t=delta/(r*r);
						break;
					}
				pq=gcd(abs(q),abs(p));
				p/=pq,q/=pq;
				if(q<0)q=-q,p=-p;
				if(p==q) cout<<"sqrt("<<t<<")"<<endl;
				else if(q==1) printf("%lld*sqrt(%lld)\n",p,t);
				else if(p==1) printf("sqrt(%lld)/%lld\n",t,q);
				else printf("%lld*sqrt(%lld)/%lld\n",p,t,q);
			}
		}
	}
	return 0;
}
2024/7/22 15:33
加载中...