30AC,70WA 。。。
查看原帖
30AC,70WA 。。。
1120678
13288917088c楼主2023/12/5 13:58

样例已过。。。 30。。。 QWQ

#include<bits/stdc++.h>
using namespace std;
int pfyz(int del){
	int x;
	for(int i=1;i*i<=del;i++){
		if(del%(i*i)==0){
			x=i;
		}
	}
	return x;
}
int max_(int a,int b){
	return a>b?a:b;
}
int min_(int a,int b){
	return a<b?a:b;
}
int gcd(int a,int b){
	if(!b){return a;}
	if(b>a){swap(a,b);}
	return gcd(b,a%b);
}
void youli(int fz,int fm){
	if(fz==0){return;}
	int z=fz/abs(fz);
	fz*=z;
	z*=(fm<0)?-1:1;
	fm=abs(fm);
	int x=gcd(fm,fz);
	fz/=x*z;
	fm/=x;
	cout<<fz;
	if(fm!=1){
		cout<<"/"<<fm;
	}
}
void youli_gen(int fm,int del){
	if(!del){return;}
	int p=pfyz(del),x=gcd(fm,p);
	del/=p*p;
	p/=x;
	fm/=x;
	if(del==1){
		youli(p,fm);
	}
	if(p-1){
		cout<<p<<"*";
	}
	cout<<"sqrt("<<del<<")";
	if(fm-1){
		cout<<"/"<<fm;
	}
}
int main(){
	int t,m,del,a,b,c;
	cin>>t>>m;
	for(int i=0;i<t;i++){
		cin>>a>>b>>c;
		if(a<0){
			a=-a;
			b=-b;
			c=-c;
		}
		del=b*b-4*a*c;
		if(del<0||!a){
			cout<<"NO\n";
			continue;
		}
		bool x=!b,y=!del;
		if(x&&y){
			cout<<"0\n";
			continue;
		}
		int p=pfyz(del);
		if(p*p==del){
			youli(p-b,2*a);
			cout<<"\n";
			continue;
		}
		youli(-b,2*a);
		if(!x&&!y){
			cout<<"+";
		}
		youli_gen(2*a,del);
		cout<<"\n";
	}
    return 0;
}
2023/12/5 13:58
加载中...