WA了4个点,求助
查看原帖
WA了4个点,求助
748859
GeoYZH楼主2024/1/25 20:15

注:纯模拟,无技术含量

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define PLL pair<ll,ll>
const ll N=1e8+10;
struct frac{
	ll mom;
	ll son;
	void easy(){
		ll gcd=__gcd(mom,son);
		mom/=gcd;
		son/=gcd;
		if(mom<0 && son<0){
			mom*=-1,son*=-1;
		}
		else if(mom<0 || son<0){
			son=-abs(son),mom=abs(mom);
		}
	}
	frac operator+(frac &b){
		ll m=mom,bm=b.mom;
		mom*=bm,b.mom*=m;
		son*=bm,b.son*=m;
		frac res(son+b.son,mom);
		easy();
		b.easy();
		return res;
	}
	frac operator-(frac &b){
		ll m=mom,bm=b.mom;
		mom*=bm,b.mom*=m;
		son*=bm,b.son*=m;
		frac res(son-b.son,mom);
		easy();
		b.easy();
		return res;
	}
	frac operator*(const frac &b){
		frac res(son*b.son,mom*b.mom);
		res.easy();
		return res;
	}
	frac operator/(frac &b){
		frac tmp(b.mom,b.son);
		frac res=(*this)*tmp;
		res.easy();
		return res;
	}
	void output(){
		easy();
		if(mom!=1)
			cout<<son<<"/"<<mom;
		else{
			cout<<son;
		}
	}
	frac(){
		son=0;
		mom=1;
	}
	frac(ll son,ll mom):mom(mom),son(son){
		easy();
	}
};
frac frac_max(frac x,frac y){
	if(x.son>=0 && y.son<0)
		return x;
	else if(x.son<0 && y.son>=0){
		return y;
	}
	bool pos=(x.son>=0 && y.son>=0);
	x.son=abs(x.son);
	y.son=abs(y.son);
	frac res;
	ll xm=x.mom,ym=y.mom;
	x.mom*=ym,y.mom*=xm;
	x.son*=ym,y.son*=xm;
	if(x.son>y.son){
		if(pos)
			res=x;
		else
			res=frac(0,1)-y;
	}
	else{
		if(pos)
			res=y;
		else
			res=frac(0,1)-x;
	}
	x.easy();
	y.easy();
	return res;
}
bool is_square(ll x){
	return floor(sqrt(x))==sqrt(x);
}
ll a,b,c;
void solve(){
	cin>>a>>b>>c;
	ll delta=b*b-4*a*c;
	if(delta<0){
		cout<<"NO\n";
		return;
	}
	else if(delta>=0){
		if(is_square(delta)){
			frac ans1(-b+sqrt(delta),2*a);
			frac ans2(-b-sqrt(delta),2*a);
			frac tmp=frac_max(ans1,ans2);
			tmp.output();
			cout<<"\n";
			return;
		}
		else{
			frac q1(-b,2*a);
			frac q2(1,2*a);
			for(ll i=1;i*i<=delta;i++){
				if(delta%(i*i)==0){
					delta/=i*i;
					q2=q2*frac(i,1);
				}
			}
			q1.easy();
			q2.easy();
			if(q1.son!=0){
				q1.output();
				cout<<"+";
			}
			if(q2.son==q2.mom){
				cout<<"sqrt("<<delta<<")";
			}
			else if(q2.mom==1){
				q2.output();
				cout<<"*sqrt("<<delta<<")";
			}
			else if(q2.son==1){
				cout<<"sqrt("<<delta<<")/"<<q2.mom;
			}
			else{
				cout<<q2.son<<"*sqrt("<<delta<<")/"<<q2.mom;
			}
			cout<<"\n";
			return;
		}
	}
}
int main(){
	ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
	ll t,m;
	cin>>t>>m;
	while(t--){
		solve();
	}
	return 0;
}
2024/1/25 20:15
加载中...