社区讨论

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 条回复,欢迎继续交流。

正在加载回复...