社区讨论
AC感想
P9750[CSP-J 2023] 一元二次方程参与者 5已保存回复 5
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 5 条
- 当前快照
- 1 份
- 快照标识符
- @m0i2fqhm
- 此快照首次捕获于
- 2024/08/31 19:34 2 年前
- 此快照最后确认于
- 2024/08/31 21:22 2 年前
没错还是我QWQ,你可以在下面的帖子找到我
两天了,终于A了,说一下我的感想
我的代码主体都是对的,就错在了输出较大的结果上QAQ
我在比较的时候用的是如下代码
CPP int fz=0-b+sqrt(d),fm=2*a;int k=abs(__gcd(fz,fm));fz/=k;fm/=k;
int fzz=0-b-sqrt(d),fmm=2*a;k=abs(__gcd(fzz,fmm));fzz/=k;fmm/=k;
long double kk1=fzz/fmm,kk2=fz/fm;
if(kk1>kk2){swap(fzz,fz);swap(fmm,fm);}
但是他有一个问题导致他无法正确比较,就是在计算的时候由于
CPPfz
fm
fzz
fmm
都是整数,所以算出来也是整数终于在下载样例之后被我发现了,之后我就改成了这样:
CPP int fz=0-b+sqrt(d),fm=2*a;int k=abs(__gcd(fz,fm));fz/=k;fm/=k;
int fzz=0-b-sqrt(d),fmm=2*a;k=abs(__gcd(fzz,fmm));fzz/=k;fmm/=k;
long double kk1=(double)fzz/fmm,kk2=(double)fz/fm;
if(kk1>kk2){swap(fzz,fz);swap(fmm,fm);}
加了一个
CPP(double)
然后。。。就A了;
对了,在这期间我还改了一个地方:在无理数的时候,
LATEXq1+q2*sqrt(n)
这里一定是“+”,不会是“-”!!!
最后贴上我的醉人代码QWQ:
CPP#include<bits/stdc++.h>
using namespace std;
bool cf(int n){int x=sqrt(n);return x*x==n;}
int fj(int n){for(int i=sqrt(n);i>=1;i--)if(n%(i*i)==0)return i;}
int t,m,a,b,c,d;
int main( ){
cin>>t>>m;
while(t--){
cin>>a>>b>>c;
d=b*b-4*a*c;
if(d<0){cout<<"NO"<<endl;continue;}
if(cf(d)){
int fz=0-b+sqrt(d),fm=2*a;int k=abs(__gcd(fz,fm));fz/=k;fm/=k;
int fzz=0-b-sqrt(d),fmm=2*a;k=abs(__gcd(fzz,fmm));fzz/=k;fmm/=k;
long double kk1=(double)fzz/fmm,kk2=(double)fz/fm;
if(kk1>kk2){swap(fzz,fz);swap(fmm,fm);}
if(fz==0){cout<<0<<endl;continue;}
long double kkk=(long double)fz/fm;fz=abs(fz);fm=abs(fm);
if(kkk<0.0) cout<<'-';
cout<<fz;
if(fm!=1) cout<<'/'<<fm;
cout<<endl;
}else{
int fz1=0-b,fm1=2*a,boo=0;int k1=abs(__gcd(fz1,fm1));fz1/=k1;fm1/=k1;
string ans1,ans2;
if(fz1==0){ans1="-1";boo=1;}
if(boo==0){
long double kkk=(double)fz1/fm1;fz1=abs(fz1);fm1=abs(fm1);
if(kkk<0.0) cout<<'-';
cout<<fz1;
if(fm1!=1) cout<<'/'<<fm1;
}
if(d==0){cout<<endl;continue;}
else if(boo==0) cout<<'+';
int fz2=fj(d),fm2=2*a;d/=fz2;d/=fz2;int k2=abs(__gcd(fz2,fm2));fz2/=k2;fm2/=k2;fz2=abs(fz2);fm2=abs(fm2);
if(fz2!=1)cout<<fz2<<'*';
cout<<"sqrt("<<d<<")";
if(fm2!=1) cout<<'/'<<fm2;
cout<<endl;
}
}
}
回复
共 5 条回复,欢迎继续交流。
正在加载回复...