看不懂为什么会te了
#include<bits/stdc++.h>
using namespace std;
#define ld long double
ld r,p,q;
ld getDelta(ld a,ld b,ld c){
return b*b-4*a*c;
}
bool check(ld a){
return abs(a)-abs((int)a)<=0.0000001;
}
int gcd(int a,int b){
if(b==0) return a;
a%=b;
return gcd(b,a);
}
int getq2(int a){
if(check(sqrt(a))) return sqrt(a);
for(ld i=a-1;i>=2;i--){
if(a%(int)i==0&&check(sqrt(i))){
r=a/i;
return sqrt(i);
}
}
r=a;
return 1;
}
void getEasy(int &a,int &b){
int _gcd=gcd(a,b);
a/=_gcd;
b/=_gcd;
}
void outV(ld x,int f1,int f2,int t){
if(check(x)){
if(!t)cout<<x;
else{
p=x,q=1;
}
}
else{
int flag1=1,flag2=1;
if(f1<0) flag1=-1;
if(f2<0)flag2=-1;
f1=abs(f1),f2=abs(f2);
getEasy(f1,f2);
flag1*=flag2;
flag2=1;
if(f1==0) flag1=0;
if(!t) cout<<f1*flag1<<"/"<<f2*flag2;
else p=f1*flag1,q=f2*flag2;
}
}
long double T,M,a,b,c;
int main(){
// freopen("uqe.in","r",stdin);
// freopen("uqe.out","w",stdout);
cin>>T>>M;
while(T--){
cin>>a>>b>>c;
ld delta;
int flag=1;
delta=getDelta(a,b,c);
if(delta<0){
cout<<"NO\n";
continue;
}
else{
if(((-b-sqrt(delta))/(2*a))>((-b+sqrt(delta))/(2*a))) flag=-1;
ld x=max(((-b+sqrt(delta))/(2*a)),((-b-sqrt(delta))/(2*a)));
// cout<<((-b-sqrt(delta))/(2*a))<<" "<<((-b+sqrt(delta))/(2*a))<<endl;
if(check(sqrt(delta))){
if(check(x)){
if(abs(x)==0) x=0;
cout<<x<<endl;
continue;
}
else{
int flag1=1,flag2=1,f1=-b+sqrt(delta)*flag,f2=2*a;
if(f1<0) flag1=-1;
if(f2<0)flag2=-1;
f1=abs(f1),f2=abs(f2);
getEasy(f1,f2);
flag1*=flag2;
flag2=1;
if(f1==0) cout<<0<<endl;
else cout<<f1*flag1<<"/"<<f2*flag2<<endl;
continue;
}
}
else{
ld q1=-b/(2*a),q2=getq2(delta)*flag;
if(q1){
outV(q1,-b,2*a,0);
cout<<"+";
}
outV(q2/(2*a),q2,2*a,1);
if(p!=1) {
if(p!=0)cout<<p<<"*";
else cout<<"*";
}
cout<<"sqrt("<<r<<")";
if(q!=1) {
if(q!=0)cout<<"/"<<q;
}
cout<<endl;
}
}
}
}