代码好像没问题啊
然而样例无输出卡死
测试点时间很快,但是全WA,没有卡时间。
做法用的是 珂爱 的做法
#include<cstdio>
#include<cctype>
#define MAX 5000005
#define int long long
int n,k,mod,pre[MAX],suf[MAX],a[MAX],ans;
char buf[(int)1e8],*ss=buf;
inline int init(){buf[fread(buf,1,(int)1e8-1,stdin)]='\n';fclose(stdin);return 0;}
const int __START__=init();
inline int read(){
int d=0;
while(!isdigit(*ss))++ss;
while(isdigit(*ss))d=d*10+(*ss++^'0');
return d;
}
inline int inv(const int p){
if(p==1)return 1;
return ((mod-mod/p) * inv(mod%p)%mod);
}
signed main(){
n=read();mod=read();k=read();
for(register int i=*pre=suf[n+1]=1;i<=n;++i){
a[i]=read();
pre[i]=pre[i-1] * a[i] %mod;
}
for(register int i=n;i;--i){
suf[i]==suf[i+1] * a[i] %mod;
}
for(register int i=1,j=k;i<=n;++i,j=j*k%mod){
ans=(ans + j*pre[i-1] %mod * suf[i+1]) %mod;
}
printf("%lld",ans * inv(pre[n])%mod);
return 0;
}