90tps求助(感觉像用bug拼出来的
查看原帖
90tps求助(感觉像用bug拼出来的
540956
douweiqi楼主2023/11/17 20:56
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
const int N=1e6+10;
const int MM=1e3+10;
int T,M;
bool pdyls(int san){
	int k=sqrt(san);
	if(k*k==san) return true;
	return false;
}
int gcd(int aa,int bb){
	if(aa%bb==0) return bb;
	return gcd(bb,aa%bb);
}
bool Zh(double k){
	int kk=k;
	if(k-kk>0.001) return true;
	return false;
}
int main(){
	cin>>T>>M;
	//freopen("test.ans","w",stdout);
	while(T--){
		int a,b,c;
		cin>>a>>b>>c;
		int san=(b*b)-(4.0*a*c); 
		if(san<0){
			cout<<"NO"<<endl;
			continue;
		}
		if(pdyls(san)){
			int p=0-b;
			if(((-b)+sqrt(san))/(0.0+2*a)<(((-b)-sqrt(san))/(0.0+2*a))){
				p-=sqrt(san);
			}else p+=sqrt(san);
			int q=2*a;
			if(p*q<0){
				cout<<'-';
			}
			if(p<0){
				p=(0-p);
			}
			if(q<0){
				q=(0-q);
			}
			int ch=(p+0.0)/(q+0.0);
			if(ch==(p+0.0)/(q+0.0)){
				cout<<(p+0.0)/(q+0.0);
			}else{
				int ab=gcd(p,q);
				cout<<p/(ab+0.0)<<'/'<<q/(ab+0.0);
			}
			cout<<endl;
			continue;
		}
		//(-b+sqrt(san))/(2.0*a)
		//(-b-sqrt(san))/(2.0*a)
		int k=sqrt(san);
		double q2=1;
		int dert=san;
		for(int i=k;i>=2;i--){
			if(dert%(i*i)==0){
				q2*=i;
				dert/=(i*i);
			}
		}
		int r=dert;
		if(((-b)+sqrt(san))/(0.0+2*a)<(((-b)-sqrt(san))/(0.0+2*a))){
			q2=(0.0-q2);
		}
		int q12=q2;
		int q22=2.0*a;
		q2/=(2*a);
		if((0.0-b)/(2.0*a)!=0){
			int p=0.0-b;
			int q=2*a;
			if(p*q<0){
				cout<<'-';
			}
			if(p<0){
				p=(0-p);
			}
			if(q<0){
				q=(0-q);
			}
			int ch=(p+0.0)/(q+0.0);
			if(ch==(p+0.0)/(q+0.0)){
				cout<<(p+0.0)/(q+0.0);
			}else{
				int ab=gcd(p,q);
				cout<<p/(ab+0.0)<<'/'<<q/(ab+0.0);
			}
			cout<<'+';
		}
		if(q2==1||q2==-1){/////////
			printf("sqrt(%d)",r);
		}else if(Zh(q2)){
			int q3=q2;
			printf("%d*sqrt(%d)",q3,r);
		}else if(Zh(1.0/q2)){//q2?=-////////
			int q3=1.0/q2;
			printf("sqrt(%d)/%d",r,q3);
		}else{
			int same=gcd(q12,q22);//q12?=-//here//////////////////////
			q12/=(same+0.0);
			q22/=(same+0.0);
			printf("%d*sqrt(%d)/%d",q12,r,q22);
		}
		cout<<endl;
	}
	return 0;
}
//过不了的数据
//a=-214
//b=0
//c=717
2023/11/17 20:56
加载中...