50pts玄关求条
查看原帖
50pts玄关求条
740333
Rannio楼主2024/10/25 20:17
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,T;
int gcd(int x,int y){
    if(y==0) return x;
    return gcd(y,x%y);
}
signed main(){
    scanf("%lld%lld",&T,&m);
    while(T--){
        int a,b,c;
        scanf("%lld%lld%lld",&a,&b,&c);
        if(a<0) a=-a,b=-b,c=-c;
        int delta=b*b-4*a*c;
        // cout<<delta<<endl;
        if(delta<0) printf("NO\n");
        else{
            int SQRT=sqrt(delta);
            if(SQRT*SQRT==delta){
                int res1=((-b)+SQRT)/(a*2);
                int res2=((-b)-SQRT)/(a*2);
                if(res1>res2){
                    int fz=-b+SQRT;
                    int fm=a*2;
                    int GCD=gcd(abs(fz),abs(fm));
                    fz/=GCD;
                    fm/=GCD;
                    if(fm<0) fm=-fm,fz=-fz;
                    if(fz==0) printf("0\n");
                    else if(fm==1) printf("%lld\n",fz);
                    else printf("%lld/%lld\n",fz,fm);
                }
                else{
                    int fz=-b-SQRT;
                    int fm=a*2;
                    int GCD=gcd(abs(fz),abs(fm));
                    fz/=GCD;
                    fm/=GCD;
                    if(fm<0) fm=-fm,fz=-fz;
                    if(fz==0) printf("0\n");
                    else if(fm==1) printf("%lld\n",fz);
                    else printf("%lld/%lld\n",fz,fm);
                }
            }
            else{
                int q1=(-b)/(a*2);
                if(q1!=0){
                    int fz=(-b),fm=a*2;
                    int GCD=gcd(abs(fz),abs(fm));
                    fz/=GCD,fm/=GCD;
                    if(fm<0) fm=-fm,fz=-fz;
                    if(fm==1) printf("%lld+",fz);
                    else printf("%lld/%lld+",fz,fm);
                }
                int r=delta,q2=1;
                // cout<<r<<endl;
                for(int j=m;j>=1;j--){
                    int w=r/j/j;
                    if(w*j*j==r){
                        q2=j;
                        r=r/(j*j);
                        break;
                    }
                }
                int fz=q2,fm=a*2;
                int GCD=gcd(abs(fz),abs(fm));
                fz/=GCD,fm/=GCD;
                if(fm<0) fm=-fm,fz=-fz;
                if(fz==fm){
                    printf("sqrt(%lld)\n",r);
                }
                else if(fm==1){
                    printf("%lld*sqrt(%lld)\n",fz/fm,r);
                }
                else{
                    if(fz==1){
                        printf("sqrt(%lld)/%lld\n",r,fm);
                    }
                    else{
                        printf("%lld*sqrt(%lld)/%lld\n",fz,r,fm);
                    }
                }
                // cout<<fz<<"/"<<fm<<" "<<r<<endl;
            }
        }
    }
    return 0;
}
2024/10/25 20:17
加载中...