10pts 求条qwq玄关
查看原帖
10pts 求条qwq玄关
1121087
czy032321054楼主2024/8/23 22:34

rt 呜呜呜只有第一个测试点过了

#include<bits/stdc++.h>
using namespace std;
int T,M,a,b,c,num,sqt;
int main(){
	cin>>T>>M;
	while(T--){
		cin>>a>>b>>c;
		if(b*b-4*a*c<0){
			cout<<"NO"<<endl;
			continue;
		}
		num=-b,sqt=b*b-4*a*c;
		a*=2;
		int sa=a;
		if(((int)sqrt(sqt))*((int)sqrt(sqt))==sqt)num+=sqrt(sqt);
		if(num!=0){
			for(int i=2;i<=min(abs(a),abs(num));i++)
				if(num%i==0&&a%i==0){
					num=num/i,a=a/i;
					i--;
				}
			if(a<0&&num<0)a*=-1,num*=-1;
			if(a==1)cout<<num;
			else cout<<num<<"/"<<a; 
		}
		int mr=1;
		if(((int)sqrt(sqt))*((int)sqrt(sqt))!=sqt){
			a=sa;
			for(int i=2;i*i<=sqt;i++)
				if(sqt%(i*i)==0){
					mr*=i,sqt/=i*i;
					i--;
				}
			for(int i=2;i<=min(abs(a),abs(mr));i++)
				if(mr%i==0&&a%i==0){
					mr/=i,a/=i;
					i--;
				}
			if(a<0&&mr<0)a*=-1,num*=-1;
			if((mr!=1||sqt!=1)&&num!=0)cout<<"+";
			if(mr!=1)cout<<mr;
			if(mr!=1&&sqt!=1)cout<<"*";
			if(sqt!=1)cout<<"sqrt("<<sqt<<")";
			if(a!=1&&(mr!=1||sqt!=1))cout<<"/"<<a;
		}
		if((num==0)&&((sqt==0&&mr==0)||((int)sqrt(sqt))*((int)sqrt(sqt))==sqt))cout<<0;
		cout<<endl;
	}
} 
2024/8/23 22:34
加载中...