70分求调
查看原帖
70分求调
1172431
Ggit110103楼主2025/8/2 00:58

70分,不知道是哪个特判没写,求调

#include<bits/stdc++.h>
using namespace std;
double ans1,ans2;
int a,b,c,d,t,m;
int gcd(int a,int b)
{
	if(b==0)return a;
	return gcd(b,a%b);
}
int main()
{
	scanf("%d%d",&t,&m);
	while(t--)
	{
		scanf("%d%d%d",&a,&b,&c);
		if(a<0)
		{
			a=-a;
			b=-b;
			c=-c;
		}
		d=b*b-4*a*c;
		if(d<0)//
			printf("NO\n");
		else if(!d)//
		{
			int a2=2*a;
			b=-b;
			int g=gcd(b,a2);
			b/=g;
			a2/=g;
			if(a2<0)
			{
				b=-b;
				a2=-a2;
			}
			if(!b)
				printf("0\n");
			else if(a2==1)
				printf("%d\n",b);
			else
				printf("%d/%d\n",b,a2);
		}
		else
		{
			int r=d;
			int q1=-b;
			int q2=1;
			for(int i=2;i*i<=r;i++)
			{
				int cnt=0;
				while(r%(i*i)==0)
				{
					q2*=i;
					r/=i*i;
				}
			}
			int a21=2*a;
			int a22=2*a;
			if(r==1)
			{
				int q1q2=q1+q2;
				int g=gcd(q1q2,a21);
				q1q2/=g;
				a21/=g;
				if(a21==1)
					printf("%d\n",q1q2);
				else
					printf("%d/%d\n",q1q2,a21);
			}
			else
			{
				int g1=gcd(q1,a21);
				int g2=gcd(q2,a22);
				q1/=g1;
				a21/=g1;
				q2/=g2;
				a22/=g2;
				if(a21<0)
				{
					a21=-a21;
					q1=-q1;
				}
				if(a22<0)
				{
					q2=-q2;
					a22=-a22;
					
				}
				if(q2<0)
					q2=-q2;
				if(q1)
				{
					if(a21==1)
						printf("%d+",q1);
					else
						printf("%d/%d+",q1,a21);
				}
				if(q2==1)
				{
					if(a22==1)
						printf("sqrt(%d)\n",r);
					else
						printf("sqrt(%d)/%d\n",r,a22);
				}
				else
				{
					if(a22==1)
						printf("%d*sqrt(%d)\n",q2,r);
					else
						printf("%d*sqrt(%d)/%d\n",q2,r,a22); 
				}
			}
		}
	}
	return 0;
}
2025/8/2 00:58
加载中...