求助:代码没错,但编译玄学失败
查看原帖
求助:代码没错,但编译玄学失败
557754
Kalenist楼主2023/1/25 22:15

以下代码在codeblocks编译成功,样例答案正确,但编译花了15秒。交上去出现了没有任何错误的编译失败 失败记录。疑似编译超时(什么鬼?为什么会出现这种情况?)。蒟蒻求助大佬答疑……

#include<bits/stdc++.h>
#define K 10010
#define N 110
#define mod 998244353
#define For(i,a,b) for(register int i=a;i<=b;i++)
using namespace std;
int n,k,gg,ans,denoo,ss[N],qq[N],pp[N];
int totp,revp,stt[K][N],enn[N],fracc[10000010]={1,1};
inline int fpoww(int a,int b)
{
    int res=1;
    while(b)
    {
        if(b&1) res=1ll*res*a%mod;
        a=1ll*a*a%mod,b>>=1;
    }
    return res;
}

inline int read()
{
    register int x=0;
    register char c=getchar();
    while(!isdigit(c)) c=getchar();
    while(isdigit(c)) x=x*10+c-48,c=getchar();
    return x;
}

int main()
{
    freopen("pursuit.in","r",stdin);
    freopen("pursuit.out","w",stdout);
    n=read(),k=read(),denoo=100000000;
    For(i,1,n) enn[i]=read();
    For(i,1,k)
    {
        For(j,1,n) stt[i][j]=read();
        pp[i]=read();
        pp[i]=1ll*pp[i]*fpoww(denoo,mod-2)%mod;
        totp=(totp+pp[i])%mod;
    }
    revp=fpoww(totp,mod-2),denoo/=10;
    For(i,1,denoo) fracc[i]=1ll*fracc[i-1]*i%mod;
    For(i,0,k)
    {
        bool flag=false;
        denoo=1;
        For(j,1,n)
        {
            if(stt[i][j] > enn[j]) {flag=true,qq[i]=0;break;}
            ss[i]=(ss[i]+enn[j]-stt[i][j])%mod;
            denoo=1ll*denoo*fracc[enn[j]-stt[i][j]]%mod;
        }
        if(flag) continue;
        denoo=1ll*denoo*fpoww(n,ss[i])%mod;
        qq[i]=1ll*fracc[ss[i]]*fpoww(denoo,mod-2)%mod;
        qq[i]=1ll*qq[i]*fpoww(mod+1-totp,ss[i])%mod;
    }
    For(i,1,k)
        gg=(gg+1ll*pp[i]*(mod+1-qq[i])%mod*revp%mod)%mod;
    gg=1ll*gg*revp%mod*fpoww(mod+1-gg,mod-2)%mod;
    ans=1ll*(mod+1-qq[0])*(gg+revp)%mod;
    printf("%d",ans);
    return 0;
}

2023/1/25 22:15
加载中...