社区讨论

求调条O(∩_∩)O

P9750[CSP-J 2023] 一元二次方程参与者 1已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@m0s2r3na
此快照首次捕获于
2024/09/07 19:41
2 年前
此快照最后确认于
2024/09/07 20:32
2 年前
查看原帖
CPP
#include<bits/stdc++.h>
#define endl '\n'
using namespace std;
template<typename T> void read(T&x){
	int sign=1;x=0;char c;
	do{
		c=getchar();
		if(c=='-') sign=-1;
	}while(!isdigit(c));
	do{
		x=x*10+c-'0';
		c=getchar();
	}while(isdigit(c));
	x*=sign;
}
int t,m;
int a,b,c;
signed main(){
//	freopen("1.in","r",stdin);
//	freopen("1.out","w",stdout);
	read(t); read(m);
	while(t--){
		read(a); read(b); read(c);
		double k,x1,x2;
		k=b*b-4*a*c;
		if(k<0){
			cout<<"NO"<<endl;
		}
		if(k==0){
			int ans1,ans2,gong;
			ans1=-b,ans2=2*a;
			if(ans1%ans2==0){
				cout<<ans1/ans2<<endl;
			}
			else{
			gong=abs(__gcd(ans1,ans2));
			cout<<ans1/gong<<"/"<<ans2/gong<<endl;
		}
	}
		if(k>0){
		x1=(-b+sqrt(k))/(2*a*1.0);
		x2=(-b-sqrt(k))/(2*a*1.0);
//		cout<<x1<<" "<<x2<<endl;
		if(x1>x2){
//			cout<<1<<endl;
			double q1;int q2;
			int ans1,ans2,gong;
			q1=sqrt(k)*1.0;q2=sqrt(k);
			if(q1==q2){
//				cout<<-1<<endl;
				ans1=-b+q2;
				ans2=2*a;
				if(ans1%ans2==0){
				cout<<ans1/ans2<<endl;
			}
			else{
			gong=abs(__gcd(ans1,ans2));
//			cout<<gong<<endl;
			cout<<ans1/gong<<"/"<<ans2/gong<<endl;
			}
		}
			int o1=-1,o2=-1;
			if(q1!=q2){
				for(int i=q2;i>=2;i--){
					double sum1=k*1.0/(i*i*1.0)*1.0; int sum2=k/(i*i);
//					cout<<sum1<<" "<<sum2<<endl;
					if(sum1==sum2){
						o1=sum2;
						o2=i;
						break;
					}
				}
				ans1=-b;
				ans2=2*a;
				if(ans1%ans2==0){
					if(ans1/ans2!=0)
					cout<<ans1/ans2<<'+';
				}
				else if(ans1%ans2!=0){
					gong=abs(__gcd(ans1,ans2));
//					cout<<ans1<<" "<<ans2<<" "<<gong<<endl;
				cout<<ans1/gong<<"/"<<ans2/gong<<'+';
				}
				if(o1==-1&&o2==-1){
					cout<<"sqrt("<<k<<")"<<"/"<<2*a<<endl;
				}
				else{
					gong=abs(__gcd(o2,2*a));
					if(2*a/gong==1&&o2/gong==1){
						cout<<"sqrt("<<o1<<")"<<endl;
					}
					else if(o2/gong==1){
						cout<<"sqrt("<<o1<<")"<<"/"<<2*a/gong<<endl;
					}
					else if(2*a/gong==1){
						cout<<o2/gong<<"*"<<"sqrt("<<o1<<")"<<endl;
					}
					
					else{
						cout<<-1<<endl;
					cout<<o2/gong<<"*"<<"sqrt("<<o1<<")"<<"/"<<2*a/gong<<endl;
				}
			}
			}	
		}	
		if(x1<x2){
//			cout<<2<<endl;
			double q1;int q2;
			int ans1,ans2,gong;
			q1=sqrt(k)*1.0;q2=sqrt(k);
			if(q1==q2){
//				cout<<-1<<endl;
				ans1=-b-q2;
				ans2=2*a;
				if(ans1%ans2==0){
				cout<<ans1*-1/ans2*-1<<endl;
			}
			else{
			gong=abs(__gcd(ans1,ans2));
//			cout<<gong<<endl;
			cout<<ans1/gong*-1<<"/"<<ans2/gong*-1<<endl;
			}
		}
			int o1=-1,o2=-1;
			if(q1!=q2){
				for(int i=q2;i>=2;i--){
					double sum1=k*1.0/(i*i*1.0)*1.0; int sum2=k/(i*i);
//					cout<<sum1<<" "<<sum2<<endl;
					if(sum1==sum2){
						o1=sum2;
						o2=i;
						break;
					}
				}
				ans1=-b;
				ans2=2*a;
				if(ans1%ans2==0){
					if(ans1/ans2!=0)
					cout<<ans1/ans2<<'+';
				}
				else if(ans1%ans2!=0){
					gong=abs(__gcd(ans1,ans2));
//					cout<<gong<<endl;
					if(ans1>0&&ans2<0){
						cout<<ans1/gong*-1<<"/"<<ans2/gong*-1<<'+';
					}
				else cout<<ans1/gong*-1<<"/"<<ans2/gong*-1<<'+';
				}
				if(o1==-1&&o2==-1){
					cout<<"sqrt("<<k<<")"<<"/"<<2*a*-1<<endl;
				}
				else{
					gong=abs(__gcd(o2,2*a));
					if(2*a/gong*-1==1&&o2/gong*-1==1){
						cout<<"sqrt("<<o1<<")"<<endl;
					}
					else if(o2/gong==1){
						cout<<"sqrt("<<o1<<")"<<"/"<<2*a/gong*-1<<endl;
					}
					else if(2*a/gong*-1==1){
						cout<<o2/gong<<"*"<<"sqrt("<<o1<<")"<<endl;
					}
					
					else
					cout<<o2/gong<<"*"<<"sqrt("<<o1<<")"<<"/"<<2*a/gong*-1<<endl;
				}
			}	
		}
}
}
	return 0;
}

///*
//-1 13 0
///

回复

2 条回复,欢迎继续交流。

正在加载回复...