50分,T4都打出来了,就这题死活不知道哪里错了
#include<bits/stdc++.h>
using namespace std;
int a,b,c,T,m;
bool f,big;
void changed1(int a,int b){
if(a%b==0){
if(a/b==0){
f=1;
return;
}
printf("%d",a/b);
return;
}
int gcd=__gcd(a,b);
a/=gcd,b/=gcd;
if(a>0&&b<0) a=-a,b=-b;
printf("%d/%d",a,b);
}
int changed3(int x){
for(int i=2;i*i<=x;i++){
if(x%i==0){
if(sqrt(i)==(int)(sqrt(i))) return i;
if(sqrt(x/i)==(int)(sqrt(x/i))) return x/i;
}
}
return -1;
}
void changed2(int a,int b,int c){
int r=sqrt(c),d=-1;
if(sqrt(c)==r){
if(r==0) return;
if(!f) printf("+");
int gcd=__gcd(a,r);
a/=gcd,r/=gcd;
if(r%a==0) printf("%d",r/a);
else printf("%d/%d",r,a);
return;
}
else{
if(!f) printf("+");
int t=changed3(c);
if(t==-1) printf("sqrt(%d)",c);
else d=sqrt(t);
c/=t;
}
if(d!=-1){
int gcd=__gcd(d,a);
d/=gcd,a/=gcd;
if(d<0&&a>0) d=-d,a=-a;
if(d%a==0) d/=a;
else if(a%d==0) a/=d;
if(d!=1) printf("%d*",d);
printf("sqrt(%d)",c);
}
if(a!=1) printf("/%d",a);
}
void solve(){
int r=b*b-4*a*c;
if(r<0){
printf("NO");
return;
}
int ans=max((-b+sqrt(r))/(2*a),(-b-sqrt(r))/(2*a));
if(ans==max((-b+sqrt(r))/(2*a),(-b-sqrt(r))/(2*a))){
printf("%d",ans);
return;
}
changed1(-b,2*a);
// if(((-b+sqrt(r)))/(2*a)<(((-b-sqrt(r)))/(2*a))) a=-a;
changed2(2*a,b,r);
}
int main(){
scanf("%d%d",&T,&m);
while(T--){
scanf("%d%d%d",&a,&b,&c);
f=big=0;
solve();
printf("\n");
}
return 0;
}