求助一道j组第三题
  • 板块学术版
  • 楼主Leave_Childhood
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/9/15 10:43
  • 上次更新2024/9/15 13:47:51
查看原帖
求助一道j组第三题
1035525
Leave_Childhood楼主2024/9/15 10:43

一元二次方程

50分QAQ

#include<bits/stdc++.h>
using namespace std;
int t,m;
int a,b,c;
bool check(int x)
{
	int a1=ceil(sqrt(x)),a2=sqrt(x);
	if(a1==a2)return true;
	return false;
}
bool check2(int x,int y)
{
    if(x==0)return true;
	if(abs(x)<abs(y))return false;
	if(abs(x)%abs(y)==0)return true;
	return false;
}
int writex(int x,int y)
{
	int a3=x,b3=y,c3=abs(__gcd(a3,b3));
	x/=c3;
	y/=c3;
	if(y<0)x*=(-1),y*=(-1);
	return x;
}
int writey(int x,int y)
{
	int a4=x,b4=y,c4=abs(__gcd(a4,b4));
	x/=c4;
	y/=c4;
	if(y<0)x*=(-1),y*=(-1);
	return y;
}
void deal(int a,int b,int c,int td)
{
	int q2=1,r=td;
	for(int i=2;abs(i*i)<=abs(r);)
	{
		if(r%(i*i)==0)q2*=i,r/=(i*i);
		else i++;
	}
	if(abs(floor((q2)/(2*a)))==1&&q2%(2*a)==0)cout<<"sqrt("<<r<<")"<<endl;
	else if(q2%(2*a)==0)cout<<abs(q2/(a*2))<<"*sqrt("<<r<<")"<<endl;
	else if((2*a)%(q2)==0)cout<<"sqrt("<<r<<")/"<<abs(2*a/q2)<<endl;
	else cout<<abs(writex(q2,2*a))<<"*sqrt("<<r<<")/"<<abs(writey(q2,2*a))<<endl;
}
int jie(int a,int b,int dt)
{
	int a1=-b+sqrt(dt);
	int a2=-b-sqrt(dt);
	int a3=max(a1/(2*a),a2/(2*a));
	if(a1/(2*a)==a3)return a1;
	if(a2/(2*a)==a3)return a2;
}
int main()
{
	cin>>t>>m;
	for(int i=1;i<=t;i++)
	{
		cin>>a>>b>>c;
		int dt=b*b-4*a*c;
		int d=jie(a,b,dt);
		if(dt<0)
		{
		cout<<"NO\n";
	    continue;
		}
		if(check(dt))
		{
			if(check2(d,2*a))cout<<d/(2*a)<<endl;
			else cout<<writex(d,2*a)<<"/"<<writey(d,2*a)<<endl;
			continue;
		}
		if(b!=0)
		{
			if(check2(-b,2*a))cout<<-b/(2*a)<<"+";
			else cout<<writex(-b,2*a)<<"/"<<writey(-b,2*a)<<"+";
		}
		deal(a,b,c,dt);
	}
    return 0;
}
2024/9/15 10:43
加载中...