以下代码在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;
}