1 条题解
-
1
#include<bits/stdc++.h> using namespace std; int in(){ int ans=0,f=1; char c=getchar(); for(;!isdigit(c);c=getchar()) if(c=='-') f=-1; for(;isdigit(c);c=getchar()) ans=ans*10+c-'0'; return ans*f; } map<int,map<int,int> >g; int gcd(int a,int b){ if(b==0) return a; if(g[a][b]) return g[a][b]; g[a][b]=gcd(b,a%b); return g[a][b]; } int t,m,a,b,d,c,flag; int bb,aa,gc; int l; int q1a,q1b,q2c,q2d,fout; int main(){ freopen("uqe.in","r",stdin); freopen("uqe.out","w",stdout); t=in();m=in(); for(;t;t--){ a=in();b=in();c=in(); if(a>0) flag=1; else flag=-1; d=b*b-4*a*c; if(d<0){ puts("NO"); continue; } //q1 bb=-b; bb*=flag; aa=2*a*flag; gc=gcd(abs(aa),abs(bb)); bb/=gc;aa/=gc; q1a=aa,q1b=bb; //q2 3 l=1; for(int i=sqrt(d);i>=2;i--){ if(d%(i*i)==0) l*=i,d/=(i*i); } aa=2*a*flag; gc=gcd(l,aa); l/=gc; aa/=gc; q2c=l,q2d=aa; if(d==0||d==1) fout=0; else fout=1; //合并 if(d==1){ gc=gcd(q1a,q2d); q1b*=q2d/gc; q2c*=q1a/gc; q1b+=q2c; q1a=q1a*q2d/gc; gc=gcd(q1a,q1b); q1a/=gc; q1b/=gc; if(q1a<0) q1a=-q1a,q1b=-q1b; } //输出 if(!fout){ if(q1a==1) printf("%d",q1b); else printf("%d/%d",q1b,q1a); } else if(fout){ if(q1b!=0){ if(q1a==1) printf("%d+",q1b); else printf("%d/%d+",q1b,q1a); } if(q2d==1){ if(q2c==1) printf("sqrt(%d)",d); else printf("%d*sqrt(%d)",q2c,d); } else{ if(q2c==1) printf("sqrt(%d)/%d",d,q2d); else printf("%d*sqrt(%d)/%d",q2c,d,q2d); } } putchar('\n'); } return 0; }
- 1
信息
- ID
- 3
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 8
- 标签
- 递交数
- 405
- 已通过
- 60
- 上传者