为什么加这几行就AC了(蒟蒻求助)
查看原帖
为什么加这几行就AC了(蒟蒻求助)
1021348
xianxi楼主2024/10/12 22:27
#include<bits/stdc++.h>
using namespace std;
long long a,b,c,s,T,m;
struct node
{
	long long fz,fm;
};
node solve(long long fz,long long fm)
{
	if(fz*fm>0){fz=abs(fz);fm=abs(fm);}
	else if(fz*fm!=0){fz=-abs(fz);fm=abs(fm);}//not fz=-fz
	if(fz==0)return {0,1};
	long long g=__gcd(abs(fz),fm);
	return {fz/g,fm/g};
}
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    cin>>T>>m;
    while(T--)
    {
    	cin>>a>>b>>c;
      //下面这几行
    	if ( a < 0 ){
			a = -a ;
			b = -b ;
			c = -c ;
		}
      //上面这几行
    	s=b*b-4*a*c;
    	long long chu=2*a;
    	if(s<0)
    	{
    		cout<<"NO"<<"\n";
    		continue;
		}
		node t=solve(-b,chu);
		if(sqrt(s)!=(long long)sqrt(s))
		{
			long long q2=(long long)sqrt(s);
			while(q2>1)
			{
				if(s%(q2*q2)==0)
				{
					break;
				}
				q2--;
			}
			long long r=s/(q2*q2);
			node tt=solve(q2,chu);
			if(tt.fm==1)
			{
				if(t.fm==1&&t.fz!=0)
				{
					cout<<t.fz<<"+";
				}
				else if(t.fz!=0)//分子为零不输出 
				{
					cout<<t.fz<<"/"<<t.fm<<"+";
				}
				if(tt.fz!=1)cout<<tt.fz<<"*"<<"sqrt("<<r<<")\n";
				else cout<<"sqrt("<<r<<")\n";
				continue;
			}
			else
			{
				if(t.fm==1&&t.fz!=0)
				{
					cout<<t.fz<<"+";
				}
				else if(t.fz!=0)
				{
					cout<<t.fz<<"/"<<t.fm<<"+";
				}
				if(tt.fz!=1)cout<<tt.fz<<"*"<<"sqrt("<<r<<")/"<<tt.fm<<"\n";
				else cout<<"sqrt("<<r<<")/"<<tt.fm<<"\n";
				continue;
			}
		}
		else
		{
			long long r=sqrt(s);
			node tt=solve((-b)+r,chu);
//			cout<<(-b)+r<<" "<<chu<<endl;
			if(tt.fm==1)
			{
				cout<<tt.fz<<"\n";
				continue;
			}
			else
			{
				cout<<tt.fz<<"/"<<tt.fm<<"\n";
				continue;
			}
		}
	}
	return 0;
}

求助大佬orz

2024/10/12 22:27
加载中...