80pts求助,TLE#4#6
查看原帖
80pts求助,TLE#4#6
977222
yanglich楼主2024/8/13 15:34
#include<bits/stdc++.h>
using namespace std;
int t,m;
inline int read()
{
    int x=0,f=1;
    char ch=getchar();
    while(ch<'0'||ch>'9')
    {
        if(ch=='-')
            f=-1;
        ch=getchar();
    }
    while(ch>='0' && ch<='9')
        x=x*10+ch-'0',ch=getchar();
    return x*f;
}
int main(){
	t=read();
	m=read();
	for(int i=1;i<=t;i++){
		int a,b,c;
		double x,x1,x2;
		a=read();
		b=read();
		c=read();
		int sj=b*b-4*a*c;
		if(sj<0){
			printf("NO\n");
		}
		else{
			bool bj=0;
			int ts=sj,yg=1;
			if(sj==1||sj==0){
				bj=1;
			}
			for(int j=sqrt(ts);j>=2;j--) {
				if(ts%(j*j)==0){
					yg=j;				
					ts/=(j*j);
					if(ts==1){
						bj=1;
						break;
					}
				}
			}
			if(bj==1){
				int p,q;
				x1=(-b+sqrt(sj))*1.0/(2.0*a);
				x2=(-b-sqrt(sj))*1.0/(2.0*a);
				x=max(x1,x2);
				for(q=1;q;q++){
					p=x*q;
					if(p*1.0/q==x&&(__gcd(p,q)==1||__gcd(p,q)==-1)){
						break;
					}
				}
				if(q==1)
					printf("%d\n",p);
				else{
					if(q<0){
						q=-q;
						p=-p;
					}
					printf("%d/%d\n",p,q);
				}
			}
			else{
				double q1,q2,q3;
				int p,q;
				q1=(-b)*1.0/(2*a);
				q2=yg*1.0/(2*a);
				q3=1/q2;
				if((q1-q2*sqrt(ts))>(q1+q2*sqrt(ts))){
					q2=-q2;
				}
				if(q1!=0){
					for(q=1;q;q++){
						p=q1*q;
						if(p*1.0/q==q1&&(__gcd(p,q)==1||__gcd(p,q)==-1)){
							break;
						}
					}
					if(q==1)
						printf("%d+",p);
					else{
						if(q<0){
							q=-q;
							p=-p;
						}
						printf("%d/%d+",p,q);
					}	
				}
				if(q2==1){
					printf("sqrt(%d)\n",ts);
				}
				else if(q2/int(q2)==1) {
					printf("%d*sqrt(%d)\n",int(q2),ts);
				}
				else if(q3/int(q3)==1){
					printf("sqrt(%d)/%d\n",ts,int(abs(q3)));
				}
				else{
					int c,d;
					for(d=1;d;d++){
						c=q2*d;
						if(c>1&&c*1.0/d==q2&&(__gcd(c,d)==1||__gcd(c,d)==-1)){
							break;
						}
					}
					printf("%d*sqrt(%d)/%d\n",c,ts,d);
				}
			}
		}
	}
	return 0;
}
2024/8/13 15:34
加载中...