J组T3求调
  • 板块学术版
  • 楼主Thronf
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/10/31 17:39
  • 上次更新2023/11/2 10:32:24
查看原帖
J组T3求调
976559
Thronf楼主2023/10/31 17:39
#include<bits/stdc++.h>
using namespace std;
int gcd(int p,int q)
{
	if(p==0)
		return 1;
	p=abs(p);
	q=abs(q);
	if(p<q)
		swap(p,q);
	if(p%q==0)
		return q;
	else
		return gcd(q,p%q);
}
int fenjie(int a)
{
	for(int i=sqrt(a);i>=2;i--)
		if(a%(i*i)==0)
			return i;
	return 1;
}
struct real_number{
	int q1_q,q1_p,q2_q,q2_p,r;
}ans,ans1;
void uqe1(int a,int b,int c,int delta)
{
	if(a<0)
	{
		ans1.q1_p=-b-sqrt(delta);
		ans1.q1_q=2*a;
	}
	else
	{
		ans1.q1_p=-b+sqrt(delta);
		ans1.q1_q=2*a;
	}
	return;
}
void uqe2(int a,int b,int c,int delta)
{
	ans1.q1_p=-b;
	ans1.q1_q=2*a;
	ans1.q2_q=2*a;
	ans1.r=delta;
	ans1.q2_p=fenjie(ans1.r);
	ans1.r/=(ans1.q2_p*ans1.q2_p);
	return;
}
int delta(int a,int b,int c)
{
	return b*b-4*a*c;
}
int main()
{
	int t,m;
	cin>>t>>m;
	for(int i=0;i<t;i++)
	{
		int a,b,c;
		cin>>a>>b>>c;
		int delta1=delta(a,b,c);
		if(delta1<0)
		{
			cout<<"NO"<<endl;
			continue;
		}
		double delta_sqrt=sqrt(delta(a,b,c));
		if(delta_sqrt==int(delta_sqrt))
		{
			uqe1(a,b,c,delta1);
			ans=ans1;
			int gcdq1=gcd(ans.q1_p,ans.q1_q);
			ans.q1_p/=gcdq1;
			ans.q1_q/=gcdq1;
			if(ans.q1_q<0)
				ans.q1_p=-ans.q1_p,ans.q1_q=-ans.q1_q;
			if(ans.q1_q==1)
				cout<<ans.q1_p<<endl;
			else
				cout<<ans.q1_p<<"/"<<ans.q1_q<<endl;
		}
		else
		{
			uqe2(a,b,c,delta1);
			ans=ans1;
			int gcdq1=gcd(ans.q1_p,ans.q1_q);
			int gcdq2=gcd(ans.q2_p,ans.q2_q);
			ans.q1_p/=gcdq1;
			ans.q1_q/=gcdq1;
			ans.q2_p/=gcdq2;
			ans.q2_q/=gcdq2;
			if(ans.q1_q<0)
				ans.q1_p=-ans.q1_p,ans.q1_q=-ans.q1_q;
			if(ans.q2_q<0)
				ans.q2_q=-ans.q2_q;
			if(ans.q1_p!=0)
			{
				if(ans.q1_q==1)
					cout<<ans.q1_p<<"+";
				else
					cout<<ans.q1_p<<"/"<<ans.q1_q<<"+";
			}
			if(ans.q2_p==1&&ans.q2_q==1)
				cout<<"sqrt("<<ans.r<<")"<<endl;
			else if(ans.q2_q==1)
				cout<<ans.q2_p<<"*"<<"sqrt("<<ans.r<<")"<<endl;
			else if(ans.q2_p==1)
				cout<<"sqrt("<<ans.r<<")/"<<ans.q2_q<<endl;
			else
				cout<<ans.q2_p<<"*sqrt("<<ans.r<<")/"<<ans.q2_q<<endl;
		}
	}
	return 0;
}

这是赛时代码 有点屎山别喷

2023/10/31 17:39
加载中...