求助入门组T3
  • 板块灌水区
  • 楼主lailai0916
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/10/22 12:08
  • 上次更新2023/10/22 12:13:01
查看原帖
求助入门组T3
455474
lailai0916楼主2023/10/22 12:08
  • 小图灵 RE 5050 分,洛谷 RE 8080 分.
#include <bits/stdc++.h>
using namespace std;

void Change(long long &x,long long &y)
{
	//保证分母为正数 
	if(y<0)
	{
		x=-x;
		y=-y;
	}
	//约分
	long long tmp=__gcd(abs(x),abs(y));
	x/=tmp;
	y/=tmp;
}
void RealNum(long long x,long long y)
{
	//输出实数 
	Change(x,y);
	if(x==0)
	{
		printf("0");
	}
	else if(y==1)
	{
		printf("%lld",x);
	}
	else
	{
		printf("%lld/%lld",x,y);
	}
}
long long w[1010];//记录质数的桶 
void Print(long long q1_x,long long q1_y,long long q2_x,long long q2_y,long long r)
{
	//q1_x/q1_y+q2_x/q2_y*sqrt(r)
	if(r==0)//如果根号下为零 
	{
		RealNum(q1_x,q1_y);
		printf("\n");
		return;
	}
	memset(w,0,sizeof(w));//清空 
	long long px=r,k=2;//px是r的备份,k是枚举质数 
	while(px>1)//分解质因数 
	{
		while(px%k==0)
		{
			px/=k;
			w[k]++;
		}
		k++;//枚举下一个数 
	}
	for(int i=2;i<=1005;i++)
	{
		while(w[i]>=2)//如果某个质因数个数大等于二 
		{
			q2_x*=i;//前面系数乘以i 
			r/=i*i;//根号下除以i*i 
			w[i]-=2;//质因数减二 
		}
	}
	//此时为最简根号 
	Change(q1_x,q1_y);
	Change(q2_x,q2_y);
	if(r==1)//如果是根号1,不用根号 
	{
		long long xx=q1_x*q2_y+q1_y*q2_x;
		long long yy=q1_y*q2_y;
		RealNum(xx,yy);
		printf("\n");
		return;
	}
	if(q1_x!=0)//如果前面部分不为零 
	{
		RealNum(q1_x,q1_y);
		printf("+");
	}
	//处理根号 
	if(q2_x==1&&q2_y==1)
	{
		printf("sqrt(%lld)",r);
	}
	else if(q2_y==1)
	{
		printf("%lld*sqrt(%lld)",q2_x,r);
	}
	else if(q2_x==1)
	{
		printf("sqrt(%lld)/%lld",r,q2_y);
	}
	else
	{
		printf("%lld*sqrt(%lld)/%lld",q2_x,r,q2_y);
	}
	printf("\n");//换行 
}
int main()
{
//	freopen("uqe.in","r",stdin);
//	freopen("uqe.out","w",stdout);
	long long T,M;
	scanf("%lld %lld",&T,&M);
	while(T--)
	{
		long long a,b,c;
		scanf("%lld %lld %lld",&a,&b,&c);
		long long dt=b*b-4*a*c;
		if(dt<0)//判别式小于零 
		{
			printf("NO\n");
		}
		else if(dt==0)//等于零 
		{
			RealNum(-b,a*2);
			printf("\n");
		}
		else//大于零 
		{
			double tx1=(-b+sqrt(dt))/(a*2);
			double tx2=(-b-sqrt(dt))/(a*2);
			if(tx1>tx2)//判断哪个根大 
			{
				Print(-b,a*2,1,a*2,dt);
			}
			else
			{
				Print(-b,a*2,-1,a*2,dt);
			}
		}
	}
	return 0;
}

求助为什么 RE.

2023/10/22 12:08
加载中...