CSP j-T3 WA90 on test 2
  • 板块学术版
  • 楼主rainbow_cat
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/10/25 16:07
  • 上次更新2023/10/25 16:34:46
查看原帖
CSP j-T3 WA90 on test 2
533160
rainbow_cat楼主2023/10/25 16:07

提交记录

#include<bits/stdc++.h>
using namespace std;
int t,m;
int a,b,c,lf;
int get(int x)
{
	for(int i=m;i>=1;i--)
		if(x%(i*i)==0)return i;
	return 1;
}
bool pd(int delta){return int(sqrt(delta))*int(sqrt(delta))==delta;}
void fun(int tmp)
{
	int g=__gcd(tmp,(2*a)),f=(2*a);
	tmp/=g,f/=g;
	if(f<0)f=-f,tmp=-tmp;
	cout<<tmp;
	if(f!=1)cout<<'/'<<f;
}
int main()
{
//	freopen("in.txt","r",stdin);
//	freopen("test.txt","w",stdout);
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin>>t>>m;
	while(t--)
	{
		cin>>a>>b>>c;
		int delta=b*b-4*a*c;
		if(delta<0)
		{
			cout<<"NO\n";
			continue;
		}
		if(pd(delta))
		{ 
			int tmp=-b+sqrt(delta),tmp2=-b-sqrt(delta);
			if(tmp/(2.0*a)>tmp2/(2.0*a))
			{
				fun(tmp);
				cout<<'\n';
			}
			else
			{
				fun(tmp2);
				cout<<'\n';
			}
		}
		else
		{
			if(b!=0)fun(-b);
			if(delta==0)
			{
				cout<<'\n';
				continue;
			}
			double tmp=-b+sqrt(delta),tmp2=-b-sqrt(delta);
			int q=get(delta);
			int ttmp=q/__gcd(abs(q),abs(2*a));
			lf=(2*a)/__gcd(abs(q),abs(2*a));
			if(tmp/double(2*a)<tmp2/double(2*a))ttmp=-ttmp;
			if(lf<0)
			{
				ttmp=-ttmp;
				lf=-lf;
			}
			if(ttmp!=1)
			{				
				if(ttmp==-1)cout<<'-';
				else
				{
					if(ttmp>0&&b)cout<<'+';
					cout<<ttmp;		
					cout<<'*';					
				}
			}	
			else if(b)cout<<'+';
			delta/=get(delta)*get(delta);
			cout<<"sqrt("<<delta<<')';
			if(lf!=1)cout<<'/'<<lf;
			cout<<'\n';
		}
	}
	return 0;
}
2023/10/25 16:07
加载中...