能过大样例,交上去0分
(当然已经写出正解了)
//本题分为deta是整数或不是整数两种情况
//1.deta是整数
//进行约分操作,比较大小输出
//2.deta不是整数 x=q1+q2*sqrt(r)
//q1=-b/(2*a) 约分
//q2=abs(sqrt(r)/(2*a)) 约分
#include<bits/stdc++.h>
using namespace std;
int T,M;
int gcd(int a,int b){
a=abs(a),b=abs(b);
if(a%b==0) return b;
else return gcd(b,a%b);
}
int main()
{
//freopen("uqe2.in","r",stdin);
//freopen("uqe2.out","w",stdout);
ios::sync_with_stdio(0);
cin>>T>>M;
while(T--){
int a,b,c;
cin>>a>>b>>c;
int deta=b*b-4*a*c;
if(deta<0) cout<<"NO"<<endl;
else{
int temp_deta=sqrt(deta);
if(temp_deta*temp_deta==deta){//结果为有理数
int x=max((-b+temp_deta),(-b-temp_deta));
int y=2*a;
int k=gcd(x,y);
x/=k;
y/=k;
int p=((x<0)^(y<0));
if(p) cout<<"-";
x=abs(x),y=abs(y);
if(y==1&&x!=0) cout<<x<<endl;
else if(x!=0) cout<<x<<"/"<<y<<endl;
}
else{
int x1=-b,y1=2*a;
int k=gcd(x1,y1);
x1/=k,y1/=k;
int p=((x1<0)^(y1<0));
if(p) cout<<"-";
x1=abs(x1),y1=abs(y1);
if(y1==1&&x1!=0) cout<<x1<<"+";
else if(x1!=0) cout<<x1<<"/"<<y1<<"+";
int x2=1;
for(int i=1;i<=sqrt(deta);i++){
if(deta%(i*i)==0) x2=i;
}
deta/=(x2*x2);
int y2=abs(2*a);
k=gcd(x2,y2);
x2/=k,y2/=k;
if(x2!=1) cout<<x2<<"*";
cout<<"sqrt("<<deta<<")";
if(y2!=1) cout<<"/"<<y2;
cout<<endl;
}
}
}
return 0;
}