P9750求助
  • 板块灌水区
  • 楼主CSP_Sloser1130
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/11/5 18:40
  • 上次更新2023/11/5 20:36:18
查看原帖
P9750求助
762695
CSP_Sloser1130楼主2023/11/5 18:40

https://www.luogu.com.cn/problem/P9750

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;

ll T,M,p,q,h,m,n,num1=0,num2=0;
bool f=false,f1=false,f2=false;
ll gcd(ll a,ll b){
    if(b==0) return a;
    return gcd(b,a%b);
}
void add(ll a,ll b,ll c,ll d){
    ll mu,zi;
    //cout<<b*d<<' '<<a*d+b*c<<endl;
    if(b==d){
        mu=b;
        zi=a+c;
    }
    else{
        mu=b*d;
        zi=a*d+b*c;
    }
    //cout<<mu<<' '<<zi<<endl;
    ll cnt=1;
    if(mu<0) cnt=1-cnt;
    if(zi<0) cnt=1-cnt;
    mu=(ll)abs(mu);
    zi=(ll)abs(zi);
    ll k=gcd(mu,zi);
    if(cnt==0) zi=-zi;
    mu/=k;
    zi/=k;
    if(mu==1) cout<<zi;
    else cout<<zi<<'/'<<mu;
}
void pu(ll a,ll b){
    if(a==0) return;
    if(a%b==0) cout<<a/b;
    else cout<<a<<'/'<<b;
    if(f1==false) cout<<'+';
}
void init1(ll a,ll b){
    if(b==0){
        f=true;
        return;
    }
    bool f2=false;
    if(a*b<0){
    	f2=true;
	} 
    a=(ll)abs(a);
    b=(ll)abs(b);
    ll g=__gcd(a,b);
    a/=g;
    b/=g;
    if(f2==true) a=-a;
    num1=a;
    num2=b;
}
void init2(ll a,ll b,ll c){
    if(a==0||b==0){
        f1=true;
        pu(num1,num2);
        return;
    }
    a=(ll)abs(a);
    c=(ll)abs(c);
    ll h=__gcd(a,c);
    a/=h;
    c/=h;
    if(a%c==0){
        if(b==1) add(num1,num2,a/c,1);
        else{
            pu(num1,num2);
            cout<<a<<"*sqrt("<<b<<")";
        }
    }else{
        if(b==1) add(num1,num2,a,c);
        else if(a==1){
            pu(num1,num2);
            cout<<"sqrt("<<b<<")/"<<c;
        }
        else{
            pu(num1,num2);
            cout<<a<<"*sqrt("<<b<<")/"<<c;
        }
    }
}
void deal(ll a,ll b,ll c){
    ll delta=b*b-4*a*c;
    if(delta<0){
        cout<<"NO"<<endl;
        return;
    }
    m=0;
    n=0;
    for(ll i=(ll)sqrt(delta);i>=1;i--){//sqrt(delta)
        if(delta%(i*i)==0){
            m=i;
            n=delta/i/i;
            break;
        }
    }
    ll fenmu=2*a;
    init1(-b,fenmu);
    init2(m,n,fenmu);
    cout<<endl;
}
int main(){
    cin>>T>>M;
    for(ll i=1;i<=T;i++){
        cin>>p>>q>>h;
        num1=0;
        num2=0;
        f=false;
        f1=false;
        if(p<0){
            p=-p;
            q=-q;
            h=-h;
        }
        deal(p,q,h);
    }
    return 0;
}
2023/11/5 18:40
加载中...