社区讨论
60pts???
P9750[CSP-J 2023] 一元二次方程参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mhjq8ueu
- 此快照首次捕获于
- 2025/11/04 06:44 4 个月前
- 此快照最后确认于
- 2025/11/04 06:44 4 个月前
CPP
#include<bits/stdc++.h>
using namespace std;
typedef long long l;
struct equ{
l a,b,c;
bool judge()
{
if(b*b-4*a*c<0) return false;
return true;
}
};
equ* e;
void frac(l g,l f)
{
l h=__gcd(g,f);
g/=h,f/=h;
if(f!=1) printf("%lld/%lld\n",g,f);
else
printf("%lld\n",g);
}
int main()
{
size_t t,m;
scanf("%zu%zu",&t,&m);
e=new equ[t+1];
for(unsigned i=0;i<t;i++)
{
scanf("%lld%lld%lld",&e[i].a,&e[i].b,&e[i].c);
if(!e[i].judge()) printf("NO\n");
else
{
if(e[i].a==0)
{
if(e[i].b==0) printf("0\n");
else if(e[i].c<=0&&e[i].b>=0) frac(-e[i].c,e[i].b);
else
{
printf("-");
e[i].c=-llabs(e[i].c),e[i].b=llabs(e[i].b);
frac(e[i].c,e[i].b);
}
}
l d=e[i].b*e[i].b-4*e[i].a*e[i].c,w=1;
double d2=sqrt(d);
if(ceil(d2)==d2)
{
l g=(-e[i].b-d2),r=(-e[i].b+d2),f=2*e[i].a;
double k=g/(double)f;
double k2=r/(double)f;
double t=max(k,k2);
if(k==t)
{
if(k<0)
{
printf("-"),k=fabs(k);
g=llabs(g),f=llabs(f);
}
frac(g,f);
}
else
{
if(k2<0)
{
printf("-"),k2=fabs(k2);
r=llabs(r),f=llabs(f);
}
frac(r,f);
}
}
else
{
for(l i=2;i<=d2;++i)
{
while(!d%(i*i)) d/=(i*i),w*=i;
}
l u=__gcd(w,2*e[i].a),s=llabs(__gcd(-e[i].b,2*e[i].a));
if(-e[i].b/s!=0)
{
printf("%lld",-e[i].b/s);
if(2*e[i].a/t!=1) printf("/%lld+",2*e[i].a/t);
}
if(w/u!=1) printf("%lld*",w/u);
printf("sqrt(%lld)",d);
if(2*e[i].a/t!=1) printf("/%lld\n",2*e[i].a/u);
}
}
}
delete[] e;
return 0;
}
这么多次提交还没AC,求条(最近一次的代码)
回复
共 0 条回复,欢迎继续交流。
正在加载回复...