本地测试的时候都是正确的,提交评测之后都是WA,下载了测试点以后答案也正确
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int t,m;
ll gcd(ll m,ll n){
return n==0?m:gcd(n,m%n);
}
void qnumio(ll p,ll q){
if(p*q>=0){
ll gcdn=gcd(max(p,q),min(p,q));
if(q/gcdn==1){
printf("%lld",p/gcdn);
}else{
printf("%lld/%lld",p/gcdn,q/gcdn);
}
}else if(p*q<0){
p=abs(p);q=abs(q);
ll gcdn=gcd(max(p,q),min(p,q));
if(q/gcdn==1){
printf("-%lld",p/gcdn);
}else{
printf("-%lld/%lld",p/gcdn,q/gcdn);
}
}
return;
}
ll func(ll r,int k){
ll res=1,num=r;
for(ll i=sqrt(r);i>1;i--){
if(num%(i*i)==0){
res*=i;
num/=i*i;
}
}
if(k==1){
return res;
}else{
return num;
}
}
int main(){
//freopen("0000a-uqe2.in","r",stdin);
//freopen("0000a-uqe2-out.out","w",stdout);
scanf("%lld %lld",&t,&m);
for(int con=0;con<t;con++){
ll a,b,c;
scanf("%lld %lld %lld",&a,&b,&c);
if(a<0){
a=-a;b=-b;c=-c;
}
ll dlt=b*b-4*a*c;
if(dlt<0){
printf("NO");
}else{
if(ll(sqrt(dlt))*ll(sqrt(dlt))==dlt){
ll p=-b+sqrt(dlt),q=2*a;
if(p==0){
printf("0");
}else{
qnumio(p,q);
}
}else{
ll p1=-b,q=2*a;
if(p1!=0){
qnumio(p1,q); //out quality part
printf("+");
}
ll p2=func(dlt,1),r=func(dlt,2);
ll gcd1=gcd(max(p2,q),min(p2,q));
if(p2/gcd1!=1){
printf("%lld*",p2/gcd1);
}
printf("sqrt(%lld)",r);
if(q/gcd1!=1){
printf("/%lld",q/gcd1);
}
}
}
printf("\n");
}
return 0;
}