RT悬关
官方数据本地测过,AC,不超时,
但ccf给了0,洛谷测全TLE
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef long long readtyp;
inline readtyp read(){readtyp xx=0;short flag=1;char ch=getchar();while(ch>'9'||ch<'0'){if(ch=='-')flag=-1;ch=getchar();}while('0'<=ch&&ch<='9'){xx=(xx<<3)+(xx<<1)+(ch^48);ch=getchar();}return xx*flag;}
void write(readtyp xx){if(xx<0){putchar('-');xx=-xx;}if(xx>=10){write(xx/10);}putchar((xx%10)^48);}
void print(readtyp xx,char ch){write(xx);if(ch)putchar(ch);}
int gcd(int aa,int bb){
if(aa==0)return bb;
return gcd(bb%aa,aa);
}
void ppp(int fz,int fm){
short flag=1;
if(fm==0||fz==0){putchar('0');return ;};
if(fm<0){
flag*=-1;
fm*=-1;
}
if(fz<0){
flag*=-1;
fz*=-1;
}
int ggcd=gcd(fz,fm);
fz/=ggcd,fm/=ggcd;
if(fm==1){
write(fz*flag);
} else {
print(fz*flag,'/');
write(fm);
}
}
void ppp2(int dt,int fm){
int fz=1;
for(int i=ceil(pow(dt,0.5));i>=1;i--){
if(dt%(i*i)==0){fz=i;break;};
}
dt/=(fz*fz);
short flag=1;
if(fm==0||fz==0){putchar('0');return ;};
if(fm<0){
flag*=-1;
fm*=-1;
}
if(fz<0){
flag*=-1;
fz*=-1;
}
int ggcd=gcd(fz,fm);
fz/=ggcd,fm/=ggcd;
if(fz!=1){
print(fz,'*');
}
printf("sqrt(%d)",dt);
if(fm!=1){
putchar('/');
write(fm);
}
}
int solve(int a,int b,int c){
int dt=b*b-4*a*c;
if(dt<0){
printf("NO\n");
}else if(pow((int)sqrt(dt),2)==dt){
ppp(-b+(a>0?sqrt(dt):-sqrt(dt)),2*a);putchar('\n');
}else{
if(b!=0){ppp(-b,2*a);putchar('+');}
ppp2(dt,2*a);putchar('\n');
}
}
int main(){
freopen("uqe.in","r",stdin);
freopen("uqe.out","w",stdout);
int T=read(),M=read();
while(T--){
int a=read(),b=read(),c=read();
solve(a,b,c);
}
return 0;
}