RT
虽然我知道哪里要改,但是求为dalao来指导亿下。
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
//#define int long long
#define F(i,j,n) for(register int i=j;i<=n;++i)
#define bug puts("liupei")
#define rt return
using namespace std;
const bool debug=0;
const int N=1e5+50;
int T,M;
signed main() {
freopen("uqe.in","r",stdin);
freopen("uqe.out","w",stdout);
scanf("%d%d",&T,&M);//M 貌似没什么用
register int a,b,c,dt;
F(_,1,T) {
scanf("%d%d%d",&a,&b,&c);
dt=b*b-4*a*c;
if(a<0) {//使一次项系数 >0
a=-a;
b=-b;
c=-c;
}
if(debug) {
printf("ANS=");
}
if(dt<0) {
printf("NO");
}
if(dt==0) { //只有一个跟
if(sqrt(dt)*sqrt(dt)==dt) { //delta 完全平方数
if((-b+int(sqrt(dt))) %(2*a)==0) {
cout<<(-b+sqrt(dt))/(2/a);
} else {
if(dt) {
register int t=dt,st=sqrt(t),d=1;
F(i,2,st) {
while(t%(i*i)==0) {
t/=i*i;
d*=i;
}//把平方项移出去
}
dt=t;//剩下不是平方项的
int gc_=__gcd(-b,2*a),gc__=__gcd(d,2*a);
if((-b)%(2*a)==0)cout<<(-b)/(2*a);
else {
if((2*a)/gc_<0) {
gc__*=-1;
gc_*=-1;
}
cout<<(-b)/gc_<<"/"<<(2*a)/gc_;
}
if(d/gc__>0)cout<<"+";
else cout<<"-";
if((d)%(2*a)==0)cout<<(d)/(2*a);
else cout<<(d)/gc__;
if(gc__!=1)cout<<"/"<<(2*a)/gc__;
puts("");
} else {
int gc_=__gcd(-b,2*a);
if((-b)%(2*a)==0)cout<<(-b)/(2*a);
else {
if((2*a)/gc_<0) {
gc_*=-1;
}
cout<<(-b)/gc_<<"/"<<(2*a)/gc_;
}
}
}
} else {
if((-b+int(sqrt(dt)))%(2*a)==0) {
cout<<(-b+sqrt(dt))/(2*a);
} else {
register int t=dt,st=sqrt(t),d=1;
F(i,2,st) {
while(t%(i*i)==0) {
t/=i*i;
d*=i;
}//把平方项移出去
}
dt=t;//剩下不是平方项的
int gc_=__gcd(-b,2*a),gc__=__gcd(d,2*a);
if((-b)%(2*a)==0)cout<<(-b)/(2*a);
else cout<<(-b)/gc_<<"/"<<(2*a)/gc_;
if(d/gc__>0)cout<<"+";
else cout<<"-";
if((d)%(2*a)==0)cout<<(d)/(2*a);
else cout<<(d)/gc__;
if(dt!=1)cout<<"*sqrt("<<dt<<")";
if(gc__!=1)cout<<"/"<<(2*a)/gc__;
puts("");
}
}
}
if(dt>0) { //有 2 个跟
if(sqrt(dt)*sqrt(dt)==dt) { //delta 完全平方数
if((-b+int(sqrt(dt))) %(2*a)==0) {
cout<<(-b+sqrt(dt))/(2/a);
} else {
if(dt!=0) {
register int t=dt,st=sqrt(t),d=1;
F(i,2,st+1) {
while(t%(i*i)==0) {
t/=i*i;
d*=i;
}//把平方项移出去
}
dt=t;//剩下不是平方项的
// if(debug)cout<<" DDD "<<dt<<" DDD ";
int gc_=__gcd(-b,2*a),gc__=__gcd(d,2*a);
if((-b)%(2*a)==0) {
if(b!=0)
cout<<(-b)/(2*a);
else
;
} else {
if((2*a)/gc_<0) {
gc__*=-1;
gc_*=-1;
}
cout<<(-b)/gc_<<"/"<<(2*a)/gc_;
}
if(d/gc__>0&&b!=0)cout<<"+";
else if(b!=0)cout<<"-";
if((d)%(2*a)==0)cout<<(d)/(2*a);
else cout<<(d)/gc__;
if(gc__!=1)cout<<"/"<<(2*a)/gc__;
} else {
int gc_=__gcd(-b,2*a);
if((-b)%(2*a)==0)cout<<(-b)/(2*a);
else {
if((2*a)/gc_<0) {
gc_*=-1;
}
cout<<(-b)/gc_<<"/"<<(2*a)/gc_;
}
}
}
} else {
if((-b+int(sqrt(dt)))%(2*a)==0) {
cout<<(-b+sqrt(dt))/(2*a);
} else {
register int t=dt,st=sqrt(t),d=1;
F(i,2,st) {
while(t%(i*i)==0) {
t/=i*i;
d*=i;
}//把平方项移出去
}
dt=t;//剩下不是平方项的
int gc_=__gcd(-b,2*a),gc__=__gcd(d,2*a);
if((2*a)/gc_<0) {
gc__*=-1;
gc_*=-1;
}
if((-b)%(2*a)==0)cout<<(-b)/(2*a);
else{
cout<<(-b)/gc_<<"/"<<(2*a)/gc_;
}
if(d*d==dt){
cout<<(d)/gc__;
}
if(d/gc__>0)cout<<"+";
else cout<<"-";
if((d)%(2*a)==0)cout<<(d)/(2*a);
else cout<<(d)/gc__;
if(dt!=1)cout<<"*sqrt("<<dt<<")";
}
}
}
puts("");//统一换行
}
rt 0;
}
/*
in
9 1000
1 -1 0
-1 -1 -1
1 -2 1
1 5 4
4 4 1
1 0 -432
1 -3 1
2 -4 1
1 7 1
out
1
NO
1
-1
-1/2
12*sqrt(3)
3/2+sqrt(5)/2
1+sqrt(2)/2
-7/2+3*sqrt(5)/2
*/