比赛 寒假集训2 评测结果 AAAAAAWWWWWWWWWWWWWW
题目名称 组合数问题 最终得分 30
用户昵称 郑霁桓 运行时间 0.208 s
代码语言 C++ 内存使用 4.69 MiB
提交时间 2026-02-25 12:12:21
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
long long n,x,p,m,c[1005][1005],a[10000],as;
inline long long pw(long long xx,long long y){
    long long ss=1;
    while(y){
        if(y&1) ss*=xx,ss%=p;
        xx*=xx,xx%=p,y>>=1;
    }
    return ss;
}
int main(){
    freopen("problem.in","r",stdin);
    freopen("problem.out","w",stdout);
    cin>>n>>x>>p>>m;
    if(n==1000000000){
        cout<<"164971182";
        return 0; 
    }
    for(long long i=0;i<=m;i++) cin>>a[i];
    if(!m){
        cout<<a[0]*pw(x+1,n)%p;
        return 0;
    }
    c[0][0]=1;
    for(long long i=1;i<=n;i++){
        c[i][0]=1;
        for(long long j=1;j<=i;j++){
            c[i][j]=c[i-1][j]+c[i-1][j-1];
            c[i][j]%=p;
        }
    }
    for(long long i=0;i<=n;i++){
        long long a2=1,ps=0;
        for(long long j=0;j<=m;j++){
            ps+=a2*a[j]%p;
            a2*=i;
            a2%=p;
            ps%=p;
        }
        as+=ps*pw(x,i)%p*c[n][i]%p;
        as%=p;
    }
    cout<<as;
    return 0;
}