CSP-JT3玄关求调10分
  • 板块灌水区
  • 楼主xue07
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/10/24 14:04
  • 上次更新2023/11/2 11:36:21
查看原帖
CSP-JT3玄关求调10分
450889
xue07楼主2023/10/24 14:04
#include<bits/stdc++.h>
#define int long long
using namespace std;
int f1,e1,fe1,k,x,y,z,zhea,T,m;
int sqr(int x){return x*x;}
int gcd(int x,int y){if(x%y==0)return y;return gcd(y,x%y);}
void find1(int x,int y,int z,int zhea){
	if((int)sqrt(zhea)*(int)sqrt(zhea)==zhea){
		f1=-y+sqrt(zhea);
		e1=2*x;
		if(f1%e1==0){cout<<f1/e1<<"\n";return ;}
		fe1=gcd(f1,e1);
		f1/=fe1;e1/=fe1;
		if(e1<0)e1=-e1,f1=-f1;
		cout<<f1/fe1<<"/"<<e1/fe1<<"\n";
		return ;
	}
	else{
		for(int i=sqrt(zhea);i>=1;i--)
		  if(zhea%(i*i)==0){
		  	k=i;
		  	break;
		  }
		f1=-y;
		e1=2*x;
		if(f1%e1==0&&f1!=0)cout<<f1/e1<<"+";
		else if(f1!=0){
			fe1=gcd(f1,e1);
			f1/=fe1;e1/=fe1;
			if(e1<0)e1=-e1,f1=-f1;
			cout<<f1<<"/"<<e1<<"+";
		}
		if(k!=1){
			f1=k;
			e1=2*x;
			if(f1%e1==0){
				if(f1/e1==1)cout<<"sqrt("<<zhea/k/k<<")\n";
				else cout<<f1/e1<<"*sqrt("<<zhea/k/k<<")\n";
			}
			else {
				fe1=gcd(f1,e1);
				f1/=fe1;e1/=fe1;
				if(e1<0)e1=-e1,f1=-f1;
				if(f1!=1)cout<<f1<<"*";
				cout<<"sqrt("<<zhea/k/k<<")";
				if(e1!=1)cout<<"/"<<e1<<"\n";
				else cout<<"\n";
			}
		}
		else {
			cout<<"sqrt("<<zhea/k/k<<")";
			if(2*x!=1)cout<<"/"<<-2*x<<"\n";
			else cout<<"\n";
		}
		
	}
	return ;
}
void find2(int x,int y,int z,int zhea){
	if((int)sqrt(zhea)*(int)sqrt(zhea)==zhea){
		f1=-y+sqrt(zhea);
		e1=2*x;
		if(f1%e1==0){cout<<f1/e1<<"\n";return ;}
		fe1=gcd(f1,e1);
		f1/=fe1;e1/=fe1;
		if(e1<0)e1=-e1,f1=-f1;
		cout<<f1<<"/"<<e1<<"\n";
		return ;
	}
	else{
		for(int i=sqrt(zhea);i>=1;i--)
		  if(zhea%(i*i)==0){
		  	k=i;
		  	break;
		  }
		f1=-y;
		e1=2*x;
		if(f1%e1==0&&f1!=0)
			cout<<f1/e1<<"+";
		else if(f1!=0){
			fe1=gcd(f1,e1);
			f1/=fe1;e1/=fe1;
			if(e1<0)e1=-e1,f1=-f1;
			cout<<f1<<"/"<<e1<<"+";
		}
		if(k!=1){
			f1=k;
			e1=2*x;
			if(f1%e1==0){
				if(f1/e1==1)cout<<"sqrt("<<zhea/k/k<<")\n";
				else cout<<f1/e1<<"*sqrt("<<zhea/k/k<<")\n";
			}
			else {
				fe1=gcd(f1,e1);
				f1/=fe1;e1/=fe1;
				if(f1!=1)cout<<f1<<"*";
				cout<<"sqrt("<<zhea/k/k<<")";
				if(e1!=1)cout<<"/"<<e1<<"\n";
				else cout<<"\n";
			}
		}
		else {
			cout<<"sqrt("<<zhea/k/k<<")";
			if(2*x!=1)cout<<"/"<<2*x<<"\n";
			else cout<<"\n";
		}
		
	}
	return ;
}
signed main(){
	cin>>T>>m;
	while(T--){
		cin>>x>>y>>z;
		zhea=y*y-4*x*z;
		if(zhea<0){cout<<"NO\n";continue;}
		if(x<0)find1(x,y,z,zhea);
		else find2(x,y,z,zhea);
	}
}
2023/10/24 14:04
加载中...