社区讨论
CSP-JT3玄关求调10分
灌水区参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @lo3xa1mu
- 此快照首次捕获于
- 2023/10/24 14:05 2 年前
- 此快照最后确认于
- 2023/11/02 11:36 2 年前
CPP
#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);
}
}
回复
共 1 条回复,欢迎继续交流。
正在加载回复...