CSP-J t3求调
  • 板块学术版
  • 楼主Chtholly39
  • 当前回复9
  • 已保存回复9
  • 发布时间2023/10/21 21:08
  • 上次更新2023/11/2 12:08:29
查看原帖
CSP-J t3求调
348327
Chtholly39楼主2023/10/21 21:08

RT

#include<bits/stdc++.h>
#define ll long long
#define N 1000039
#define INF 100000000039
using namespace std;
ll t,m,pf[N],alpha;
bool yj;
void fillpf(ll k){
	ll q=sqrt(k)+1;
	for(ll i=1;i<=q;i++) pf[i]=i*i;
}
ll fl(ll k,ll p){
	if(k==0) return 0;
	ll d=1; 
	for(ll i=2;i<=sqrt(p)+1;i++)
		while(k%pf[i]==0) d*=pf[i],k/=pf[i];
	return d;
}
ll gcd(ll a,ll b){
	if(b==0) return a;
	else return gcd(b,a%b);
}
int main(){
	//freopen("uqe.in","r",stdin);
	//freopen("uqe.out","w",stdout);
	cin>>t>>m;
	while(t--){
		ll a,b,c; cin>>a>>b>>c;
		ll delta=b*b-4*a*c;
		if(m<=1){
			cout<<0<<endl;
		}
		yj=false;
		if(delta<0) cout<<"NO"<<endl;
		else{
			fillpf(m);
			ll gcdab=gcd(2*abs(a),abs(b)),p,q;
			if(delta==0) p=0,q=0;
			else p=delta/fl(delta,m),q=sqrt(fl(delta,m));
			//cout<<p<<' '<<q<<endl; 
			ll gcdaq=gcd(2*abs(a),abs(q));
			//cout<<a<<' '<<b<<' '<<c<<endl;
			double ans,ans1=-double(b)/double(2*a),ans2;
			if(p==1||p==0) ans2=double(q)/double(abs(a)*2);
			ans=ans1+ans2;
			//cout<<ans1<<' '<<ans2<<' '<<ans<<endl;
			if(int(ans)==ans&&(p==1||p==0)){
				cout<<ans1+ans2<<endl;
				yj=1;
			}
			else if(p==1){
				if(a*b>0)
					cout<<(-abs(b)/gcdab*2*abs(a)/gcdaq+2*abs(a)/gcdab*abs(q)/gcdaq)<<'/'<<(2*abs(a)/gcdaq*2*abs(a)/gcdab)<<endl;
				if(a*b<0)
					cout<<(abs(b)/gcdab*2*abs(a)/gcdaq+2*abs(a)/gcdab*abs(q)/gcdaq)<<'/'<<(2*abs(a)/gcdaq*2*abs(a)/gcdab)<<endl;
				yj=1;
			}
			if(yj==false){
				if((abs(q)/gcdaq)%(2*abs(a)/gcdaq)!=0){
					if(a*b==0) alpha=7890;
					else if(a*b>0&&2*abs(a)/gcdab!=1) cout<<'-'<<(abs(b)/gcdab)<<'/'<<(2*abs(a)/gcdab);
					else if(a*b>0&&2*abs(a)/gcdab==1) cout<<'-'<<(abs(b)/gcdab);
					else if(a*b<0&&2*abs(a)/gcdab!=1) cout<<(abs(b)/gcdab)<<'/'<<(2*abs(a)/gcdab);
					else cout<<(abs(b)/gcdab);
					if(b!=0&&(p!=0||q!=0)) cout<<'+';
					if(p==0&&q==0) alpha=123456;
					else if(p==1||p==0) cout<<(abs(q)/gcdaq)<<'/'<<(2*abs(a)/gcdaq);
					else if(abs(q)/gcdaq==1&72*abs(a)/gcdaq!=1) cout<<"sqrt("<<p<<")/"<<(2*abs(a)/gcdaq);
					else if(abs(q)/gcdaq!=1&&2*abs(a)/gcdaq!=1) cout<<(abs(q)/gcdaq)<<"*sqrt("<<p<<")/"<<(2*abs(a)/gcdaq);
					else if(abs(q)/gcdaq==1&72*abs(a)/gcdaq==1) cout<<"sqrt("<<p<<")";
					else cout<<(abs(q)/gcdaq)<<"*sqrt("<<p<<")/"<<(2*abs(a)/gcdaq);
					cout<<endl;
				}
				else if((abs(q)/gcdaq)%(2*abs(a)/gcdaq)==0){
					ll pq=abs(q)/(2*abs(a));
					if(a*b==0) alpha=7890;
					else if(a*b>0&&2*abs(a)/gcdab!=1) cout<<'-'<<(abs(b)/gcdab)<<'/'<<(2*abs(a)/gcdab);
					else if(a*b>0&&2*abs(a)/gcdab==1) cout<<'-'<<(abs(b)/gcdab);
					else if(a*b<0&&2*abs(a)/gcdab!=1) cout<<(abs(b)/gcdab)<<'/'<<(2*abs(a)/gcdab);
					else cout<<(abs(b)/gcdab);
					if(b!=0&&(p!=0||q!=0)) cout<<'+';
					if(p==0&&q==0) alpha=123456;
					else if(p==1||p==0) cout<<abs(pq);
					else if(2*abs(a)/gcdaq!=1&&abs(pq)==1) cout<<"sqrt("<<p<<")/"<<(2*abs(a)/gcdaq);
					else if(2*abs(a)/gcdaq==1&&abs(pq)!=1) cout<<abs(pq)<<"*sqrt("<<p<<")";
					else if(2*abs(a)/gcdaq==1&&abs(pq)==1) cout<<"sqrt("<<p<<")";
					else cout<<abs(pq)<<"*sqrt("<<p<<")/"<<(2*abs(a)/gcdaq);
					cout<<endl;
				}
			}
		}
	}
}
2023/10/21 21:08
加载中...