CCF阴险的数据
查看原帖
CCF阴险的数据
935976
Amoribus楼主2024/8/21 13:29

能过大样例,交上去0分

(当然已经写出正解了)

//本题分为deta是整数或不是整数两种情况
//1.deta是整数
//进行约分操作,比较大小输出
//2.deta不是整数 x=q1+q2*sqrt(r)
//q1=-b/(2*a) 约分 
//q2=abs(sqrt(r)/(2*a)) 约分 
#include<bits/stdc++.h>
using namespace std;
int T,M;
int gcd(int a,int b){
	a=abs(a),b=abs(b);
	if(a%b==0) return b;
	else return gcd(b,a%b);
} 
int main()
{
	//freopen("uqe2.in","r",stdin);
	//freopen("uqe2.out","w",stdout); 
	ios::sync_with_stdio(0);
	cin>>T>>M;
	while(T--){
		int a,b,c;
		cin>>a>>b>>c;
		int deta=b*b-4*a*c;
		if(deta<0) cout<<"NO"<<endl;
		else{
			int temp_deta=sqrt(deta);
			if(temp_deta*temp_deta==deta){//结果为有理数 
				int x=max((-b+temp_deta),(-b-temp_deta));
				int y=2*a;
				int k=gcd(x,y);
				x/=k;
				y/=k;
				int p=((x<0)^(y<0));
				if(p) cout<<"-";
				x=abs(x),y=abs(y);
				if(y==1&&x!=0) cout<<x<<endl;
				else if(x!=0) cout<<x<<"/"<<y<<endl;
			}
			else{
				int x1=-b,y1=2*a;
				int k=gcd(x1,y1);
				x1/=k,y1/=k;
				int p=((x1<0)^(y1<0));
				if(p) cout<<"-";
				x1=abs(x1),y1=abs(y1);
				if(y1==1&&x1!=0) cout<<x1<<"+";
				else if(x1!=0) cout<<x1<<"/"<<y1<<"+";
				int x2=1;
				for(int i=1;i<=sqrt(deta);i++){
					if(deta%(i*i)==0) x2=i;
				}
				deta/=(x2*x2);
				int y2=abs(2*a);
				k=gcd(x2,y2);
				x2/=k,y2/=k;
				if(x2!=1) cout<<x2<<"*";
				cout<<"sqrt("<<deta<<")";
				if(y2!=1) cout<<"/"<<y2;
				cout<<endl;
			}
		}
	} 
	return 0;
}
2024/8/21 13:29
加载中...