CSP-J T3 70求调或hack
  • 板块学术版
  • 楼主_Icetihw_
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/10/22 00:51
  • 上次更新2023/11/2 12:03:09
查看原帖
CSP-J T3 70求调或hack
1127667
_Icetihw_楼主2023/10/22 00:51
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll t,m;
ll a,b,c;
ll deta;
ll k[100005];
int main(){
	cin>>t>>m;
	for(int i=1;i<=100005;i++)k[i] = i*i;
	k[0] = 1;
	while(t--){
		cin>>a>>b>>c;
		deta = b*b - 4 * a * c;
		if(deta < 0) cout<<"NO"<<endl;
		else{
			if(sqrt(deta) == int(sqrt(deta))){
				ll fz; 
				if(a > 0)fz = -1 * b + sqrt(deta);
				else fz = -1 * b - sqrt(deta);
				ll fm = 2 * a;
				ll f = 1,q;
				if(fz * fm < 0)f = -1;
				fz = abs(fz);fm = abs(fm);
				q = __gcd(fz,fm);
				fz /= q;fm /= q;
				if(fm != 1)cout<<f*fz<<"/"<<fm<<endl;
				else cout<<f*fz<<endl;
			}
			else{
				if(b != 0){
					ll fz = -1 * b;
					ll fm = 2 * a;
					ll f = 1,q;
					if(fz * fm < 0)f = -1;
					fz = abs(fz);fm = abs(fm);
					q = __gcd(fz,fm);
					fz /= q;fm /= q;
					if(fm != 1)cout<<f*fz<<"/"<<fm<<"+";
					else cout<<f*fz<<"+";
				}
				ll q;
				if(a < 0)a = abs(a);
				for(int i=int(sqrt(deta));i>=1;i--)
					if(deta % k[i] == 0){
						q = i;
						break;
					}
				deta = deta / (q*q);
				if(q*1.0/2/a == 1)cout<<"sqrt("<<deta<<")"<<endl;//q2 = q*1.0/2/a
				else if(q*1.0/2/a == int(q*1.0/2/a))cout<<q*1.0/2/a<<"*sqrt("<<deta<<")"<<endl;
				else if(1/(q*1.0/2/a) == int(1/(q*1.0/2/a)))cout<<"sqrt("<<deta<<")/"<<1/(q*1.0/2/a)<<endl;
				else{
					ll fz = q,fm = 2*a;
					q = __gcd(fz,fm);
					fz/=q;fm/=q;
					if(fm!=1)cout<<fz<<"*sqrt("<<deta<<")/"<<fm<<endl;
					else cout<<fz<<"*sqrt("<<deta<<")"<<endl;
				}
			}
		}
	}
	return 0;
}
2023/10/22 00:51
加载中...