1 条题解

  • 1
    @ 2023-11-4 17:16:28
    #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
    标签
    递交数
    404
    已通过
    59
    上传者