P9750,玄之又玄
查看原帖
P9750,玄之又玄
679549
noip_ioi_luck楼主2024/3/23 21:57

洛谷说:

样例输出中:

我输出的:

这不没区别吗?

以下是让人看了头晕的代码:

#include<bits/stdc++.h>
using namespace std;
int t,T,M,a,b,c,p,sum;
int f[1000010],qjj[1000010],k[1000010];
bool flag;
void print(int p,int x)
{
	memset(f,0,sizeof(f));
	int h=p,i=1,kk=1;
	p=abs(p);
	while(p!=1)
	{
		if(p%qjj[i]==0) p/=qjj[i],f[qjj[i]]++;
		else i++;
	}
	for(int j=1;j<=i;j++)
	{
		for(int k=1;k<=f[qjj[j]]/2;k++)
			kk*=qjj[j];
	}
	int z=__gcd(kk,x);
	int ans=0;
	if(h<0) ans++;
	if(x<0) ans++;
	if(!flag)
	{
		if(ans==1) cout<<'-';
		else cout<<'+';
	}

	if(z==kk)
		cout<<"sqrt("<<abs(h/kk/kk)<<')'<<'/'<<abs(x/z)<<"\n";
	else if(z==x)
		cout<<abs(kk/z)<<'*'<<"sqrt("<<abs(h/kk/kk)<<')'<<"\n";
 	else
		cout<<abs(kk/z)<<'*'<<"sqrt("<<abs(h/kk/kk)<<')'<<'/'<<abs(x/z)<<"\n";
	return ;
}
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
//	freopen("1.in","r",stdin);
//	freopen("1.out","w",stdout);
    k[1]=1;
    for(int i=2;i<=1000;i++)
    {
    	if(k[i]) continue;
    	for(int j=2;j*i<=1e6;j++)
			k[i*j]=1;
	}
	for(int i=1;i<=1e6;i++)
		if(!k[i]) qjj[++t]=i;
    cin>>T>>M;
    while(T--)
    {
    	flag=0;
    	cin>>a>>b>>c;
    	if(b*b<4*a*c) cout<<"NO\n";
    	else if((-b+sqrt(b*b-4*a*c))/(2*a)<(-b-sqrt(b*b-4*a*c))/(2*a))
    	{
    		int p=b*b-4*a*c;
			if(sqrt(p)*sqrt(p)==p)
			{
				int v=sqrt(p);
				if(-b-v==0)
				{
					cout<<"0\n";
					continue;
				}
				if((-b-v)%(2*a)==0)
					cout<<(-b-v)/(2*a)<<"\n";
				else
				{
					sum=0;
					int j=__gcd((-v-b),(2*a));
					if(-v-b<0) sum++;
					if(2*a<0) sum++;
					if(sum==1)
						cout<<'-'<<abs((-b-v)/j)<<'/'<<abs((2*a)/j)<<"\n";
					else
						cout<<abs((-b-v)/j)<<'/'<<abs((2*a)/j)<<"\n";
				}
			}
			else
			{
				sum=0;
				if((-b)<0) sum++;
				if(2*a<0) sum++;
				if((-b)%(2*a)==0)
				{
					if(b!=0)
					{
						if(sum==1) cout<<'-'<<abs(-b)/abs(2*a);
						else cout<<abs(-b)/abs(2*a);
					}
					else flag=1;
				}
				else
				{
					if(sum==1) cout<<'-'<<abs(-b)<<'/'<<abs(2*a);
					else cout<<abs(-b)<<'/'<<abs(2*a);
				}
				print(-p,2*a);
			}
		}
    	else
    	{
			int p=b*b-4*a*c;
			if(sqrt(p)*sqrt(p)==p)
			{
				int v=sqrt(p);
				if(v-b==0)
				{
					cout<<"0\n";
					continue;
				}
				if((-b+v)%(2*a)==0)
					cout<<(-b+v)/(2*a)<<"\n";
				else
				{
					sum=0;
					int j=__gcd((v-b),(2*a));
					if(v-b<0) sum++;
					if(2*a<0) sum++;
					if(sum==1)
						cout<<'-'<<abs((-b+v)/j)<<'/'<<abs((2*a)/j)<<"\n";
					else
						cout<<abs((-b+v)/j)<<'/'<<abs((2*a)/j)<<"\n";
				}
			}
			else
			{
				sum=0;
				if((-b)<0) sum++;
				if(2*a<0) sum++;
				if((-b)%(2*a)==0)
				{
					if(b!=0)
					{
						if(sum==1) cout<<'-'<<abs(-b)/abs(2*a);
						else cout<<abs(-b)/abs(2*a);
					}
					else flag=1;
				}
				else
				{
					if(sum==1) cout<<'-'<<abs(-b)<<'/'<<abs(2*a);
					else cout<<abs(-b)<<'/'<<abs(2*a);
				}
				print(p,2*a);
			}
		}
	}
    return 0;
}

2024/3/23 21:57
加载中...