CSP-J 2023 T3求助
  • 板块学术版
  • 楼主Chizuru_Ichinose
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/11/21 19:34
  • 上次更新2023/11/21 21:28:47
查看原帖
CSP-J 2023 T3求助
1013142
Chizuru_Ichinose楼主2023/11/21 19:34
#include<bits/stdc++.h>
#define ll int
using namespace std;
ll T,A,B,C,M;
void output(ll molecule,ll denominator){
	//The denominator cannot be negative
	ll Gcd=__gcd(molecule,denominator);
	molecule/=Gcd; denominator/=Gcd;
	if(denominator<0){
		denominator=-denominator;
		molecule=-molecule;
	}
	if(denominator==1){
		cout<<molecule;
		return ;//Divisible
	}
	cout<<molecule<<'/'<<denominator;
	return ;
	
}
ll delta(ll N,ll M,ll K){
	return M*M-4*N*K;
}
void imitate(ll a,ll b,ll c){
	ll D=delta(a,b,c);
	// if(a<0){a=-b;b=-b;c=-c;}
	//situation 1
	if(D<0){
		cout<<"NO"<<endl;
		return ;
	}
	//situation 2
	if(D==0){
		output(-b,2*a);
		cout<<endl;
		return ;
	}
	//situation 3
	//D>0 and D is a perfectly squared number
	if(sqrt(D)*sqrt(D)==D) {
		ll p;
		if(a<0) p=-b-sqrt(D);
		else p=-b+sqrt(D);
		output(p,2*a);
		cout<<endl;
		return ;
	}
	//situation 4
	//D>0 and D isnot a perfectly squared number
	if(b!=0){
		output(-b,2*a);
		// if(a<0) cout<<'-';
		// else cout<<'+';
		cout<<'+';
	}
	ll accumulate=1;
	for(int i=2;i*i<=D;i++){
		if(D%(i*i)==0){
			accumulate*=i;
			D/=(i*i);
		}
	}
	// bool enti=true;
	// if(accumulate%(2*a)==0){
		// accumulate/=(2*a);
		// enti=false;
	// }
	ll temp=2*a;
	ll gCd=__gcd(accumulate,temp);
	accumulate/=gCd; temp/=gCd;
	if(temp<0){
		temp=-temp;
		accumulate=-accumulate;
	}
	if(accumulate!=1) cout<<accumulate<<'*';
	cout<<"sqrt("<<D<<")";
	// if(enti==true)cout<<'/'<<2*a;
	if(temp!=1) cout<<'/'<<temp;
	cout<<'\n';
	return ;
	
}
int main(void){
	cin>>T>>M;
	while(T--){
		cin>>A>>B>>C;
		imitate(A,B,C);
	}
	
	return 0;
}
2023/11/21 19:34
加载中...