社区讨论
求调条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 条回复,欢迎继续交流。
正在加载回复...