rt,不知道哪里错了,大样例过了,但只有30pts
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int t,m;
int jdz(int x)
{
if(x<0)return -x;
else return x;
}
struct Real
{
int qd,qs,rs,rd,rg;
int qz;
void changeq()
{
if((qd*qs)>=0)
{
qz=1;
}
else
{
qz=-1;
}
qd=jdz(qd);
qs=jdz(qs);
int k=__gcd(qd,qs);
qd/=k;
qs/=k;
}
void changer()
{
if(rg==0)
{
rs=0;
return;
}
for(int i=2;i<=34;++i)
{
int tmp=i*i;
while((rg%tmp)==0)
{
rg/=tmp;
rs*=i;
}
}
int k1=__gcd(rd,rs);
rd/=k1;
rs/=k1;
if(rg==1)
{
if(qz==1)
{
int k=qd*rd/__gcd(qd,rd);
qs*=k/qd;
rs*=k/rd;
qs+=rs;
qd=k;
rs=0;
}
else
{
int k=qd*rd/__gcd(qd,rd);
qs*=k/qd;
rs*=k/rd;
qs-=rs;
qd=k;
rs=0;
if(qs<=0)
{
qz=1;
qs=jdz(qs);
}
}
int k=__gcd(qd,qs);
qd/=k;
qs/=k;
}
}
void printR()
{
if(qs==0&&rs==0)cout<<0;
else if(qs!=0)
{
if(qz==-1)cout<<"-";
if(qs%qd==0)
{
cout<<qs/qd;
}
else if(qd==1)
{
cout<<qs;
}
else
cout<<qs<<"/"<<qd;
if(rs!=0)
{
cout<<"+";
if(rs==1&&rd==1)
{
cout<<"sqrt("<<rg<<")";
}
else if(rs==1&&rd!=1)
{
cout<<"sqrt("<<rg<<")"<<"/"<<rd;
}
else if(rd==1&&rs!=1)
{
cout<<rs<<"*"<<"sqrt("<<rg<<")";
}
else
{
cout<<rs<<"*"<<"sqrt("<<rg<<")"<<"/"<<rd;
}
}
}
else
{
if(rs==1&&rd==1)
{
cout<<"sqrt("<<rg<<")";
}
else if(rs==1&&rd!=1)
{
cout<<"sqrt("<<rg<<")"<<"/"<<rd;
}
else if(rd==1&&rs!=1)
{
cout<<rs<<"*"<<"sqrt("<<rg<<")";
}
else
{
cout<<rs<<"*"<<"sqrt("<<rg<<")"<<"/"<<rd;
}
}
cout<<"\n";
}
void work(int a,int b,int c)
{
qd=2*a,qs=-b;
rd=jdz(2*a),rs=1;
rg=b*b-4*a*c;
changeq();
changer();
printR();
}
};
signed main()
{
// freopen("uqe.in","r",stdin);
// freopen("uqe.out","w",stdout);
// ios::sync_with_stdio(0);
// cin.tie(0);
// cout.tie(0);
cin>>t>>m;
while(t--)
{
int a,b,c;
cin>>a>>b>>c;
int delta=b*b-4*a*c;
if(delta<0)
{
cout<<"NO\n";
}
else
{
Real x;
x.work(a,b,c);
}
}
}