求调
查看原帖
求调
913288
3_14楼主2025/6/15 15:31

样例不过 www

炸了

#include<bits/stdc++.h>
#define lcm(x,y) x/__gcd(x,y)*y
#define lb(x) (x&-x)
#define str to_string
using namespace std;
using ll=long long;
const double EPS=1e-6,PAI=acos(-1.0);
const int MAX=3e4+5,mod=1e9+7,MOD=998244353;
pair<int,int>yue(pair<int,int>a){
    int u=a.first,v=a.second,res=__gcd(abs(u),abs(v));
    u/=res,v/=res;
    if(u<0&&v>0){
        u=-u;
        v=-v;
    }
    return{u,v};
}
pair<int,int>add(pair<int,int>a,pair<int,int>b){
    int q=a.first,w=a.second,e=b.first,r=b.second;
    w*=r;
    q*=r;
    e*=w;
    return{q+e,w};
}
pair<int,int>jian(int dt){
    int cnt=ceil(sqrt(dt))+1,x=0,y=0;
    for(int i=cnt;i>=1;i--){
        if(dt%(i*i)==0){
            x=i;
            y=dt/(i*i);
            break;
        }
    }
    return{x,y};
}
void print(pair<int,int>a,pair<pair<int,int>,int>b){
    a=yue(a);
    int n=0,m=0,o=0,p=0;
    if(a.first%a.second==0)n=a.first/a.second;
    pair<int,int>t={b.first.first,b.second};
    t=yue(t);
    if(t.first%t.second==0)m=t.first/t.second;
    if(b.first.second>1){
        if(n!=0){
            if(m)cout<<n<<'+'<<m<<"*sqrt("<<b.first.second<<")\n";
            else cout<<n<<'+'<<(t.first>1?str(t.first):"")<<"sqrt("<<b.first.second<<")/"<<t.second<<'\n';
        }else{
            if(m!=0){
                if(a.first!=0)cout<<a.first*(a.second/abs(a.second))<<'/'<<abs(a.second)<<'+'<<m<<"*sqrt("<<b.first.second<<")\n";
                else cout<<m<<"*sqrt("<<b.first.second<<")\n";
            }else{
                if(a.first!=0)cout<<a.first*(a.second/abs(a.second))<<'/'<<abs(a.second)<<'+'<<(t.first>1?str(t.first):"")<<"sqrt("<<b.first.second<<")/"<<t.second<<'\n';
                else cout<<(t.first>1?str(t.first):"")<<"sqrt("<<b.first.second<<")/"<<t.second<<'\n';
            }
        }
    }else if(b.first.second==0){
        if(n!=0)cout<<n<<'\n';
        else cout<<a.first*(a.second/abs(a.second))<<'/'<<abs(a.second)<<'\n';
    }else{
        if(n!=0){
            if(m!=0)cout<<n+m<<'\n';
            else{
                pair<int,int>er={n,1};
                er=add(t,er);
                int w=er.first/er.second;
                if(er.first%er.second==0)cout<<w<<'\n';
                else cout<<er.first<<'/'<<er.second<<'\n';
            }
        }else{
            if(m!=0){
                pair<int,int>er={m,1};
                er=add(a,er);
                int w=er.first/er.second;
                if(er.first%er.second==0)cout<<w<<'\n';
                else cout<<er.first<<'/'<<er.second<<'\n';
            }else{
                pair<int,int>er=add(a,t);
                int w=er.first/er.second;
                if(er.first%er.second==0)cout<<w<<'\n';
                else cout<<er.first<<'/'<<er.second<<'\n';
            }
        }
    }
}
void solve(){
    int a,b,c;
    cin>>a>>b>>c;
    int dt=b*b-4*a*c;
    if(dt<0){
        cout<<"NO\n";
        return;
    }else{
        pair<int,int>fac1={-b,2*a};
        pair<pair<int,int>,int>fac2={jian(dt),2*a};
        print(fac1,fac2);
    }
}
int t,m;
int main(){
    ios::sync_with_stdio(false);
    cin.tie(0),cout.tie(0);
    cin>>t>>m;
    while(t--)solve();
    return 0;
}
2025/6/15 15:31
加载中...