【悬关】cspj T3求助
  • 板块灌水区
  • 楼主YJH_Lo_o
  • 当前回复2
  • 已保存回复2
  • 发布时间2023/10/31 20:03
  • 上次更新2023/11/2 10:31:00
查看原帖
【悬关】cspj T3求助
760987
YJH_Lo_o楼主2023/10/31 20:03

RT悬关

官方数据本地测过,AC不超时,

但ccf给了0,洛谷测全超时

代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef long long readtyp;
inline readtyp read(){readtyp xx=0;short flag=1;char ch=getchar();while(ch>'9'||ch<'0'){if(ch=='-')flag=-1;ch=getchar();}while('0'<=ch&&ch<='9'){xx=(xx<<3)+(xx<<1)+(ch^48);ch=getchar();}return xx*flag;}
void write(readtyp xx){if(xx<0){putchar('-');xx=-xx;}if(xx>=10){write(xx/10);}putchar((xx%10)^48);}
void print(readtyp xx,char ch){write(xx);if(ch)putchar(ch);}

int gcd(int aa,int bb){
    if(aa==0)return bb;
    return gcd(bb%aa,aa);
}
void ppp(int fz,int fm){
    short flag=1;
    if(fm==0||fz==0){putchar('0');return ;};
    if(fm<0){
        flag*=-1;
        fm*=-1;
    }
    if(fz<0){
        flag*=-1;
        fz*=-1;
    }
    int ggcd=gcd(fz,fm);
    fz/=ggcd,fm/=ggcd;
    if(fm==1){
        write(fz*flag);
    } else {
        print(fz*flag,'/');
        write(fm);
    }
}
void ppp2(int dt,int fm){
    int fz=1;
    for(int i=ceil(pow(dt,0.5));i>=1;i--){
        if(dt%(i*i)==0){fz=i;break;};
    }
    dt/=(fz*fz);
    short flag=1;
    if(fm==0||fz==0){putchar('0');return ;};
    if(fm<0){
        flag*=-1;
        fm*=-1;
    }
    if(fz<0){
        flag*=-1;
        fz*=-1;
    }
    int ggcd=gcd(fz,fm);
    fz/=ggcd,fm/=ggcd;
    if(fz!=1){
        print(fz,'*');
    }
    printf("sqrt(%d)",dt);
    if(fm!=1){
        putchar('/');
        write(fm);
    }
}
int solve(int a,int b,int c){
    int dt=b*b-4*a*c;
    if(dt<0){
        printf("NO\n");
    }else if(pow((int)sqrt(dt),2)==dt){
        ppp(-b+(a>0?sqrt(dt):-sqrt(dt)),2*a);putchar('\n');
    }else{
        if(b!=0){ppp(-b,2*a);putchar('+');}
        ppp2(dt,2*a);putchar('\n');
    }
    
}

int main(){
    freopen("uqe.in","r",stdin);
    freopen("uqe.out","w",stdout);
  
    int T=read(),M=read();
    while(T--){
        int a=read(),b=read(),c=read();
        solve(a,b,c);
    }
    
    return 0;
}
2023/10/31 20:03
加载中...