比赛 寒假集训2 评测结果 WWWEEEEEEEEEEEEEEEEE
题目名称 组合数问题 最终得分 0
用户昵称 KKZH 运行时间 3.239 s
代码语言 C++ 内存使用 3.42 MiB
提交时间 2026-02-25 11:42:10
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e3+10;
int n,m,x,ans=0,mod;
int a[N],f[N];
int qsm(int x,int y){
    int sum=y,cnt=x,ans=1;
    while(sum>0){
        if(sum%2==1) ans=(cnt*ans)%mod;
        cnt=(cnt*cnt)%mod;
        sum=sum/2;
    }
    return ans;
}
int C(int a,int b){
    if(a==b) return 1;
    return (f[b]*qsm(f[a]%mod,mod-2)%mod*qsm(f[b-a]%mod,mod-2)%mod)%mod;
} 
signed main(){
    freopen("problem.in","r",stdin);
    freopen("problem.out","w",stdout);
    ios::sync_with_stdio(false);
    cin.tie(0),cout.tie(0);
    cin>>n>>x>>mod>>m;
    f[0]=1;
    for(int i=1;i<=n;i++) f[i]=(f[i-1]*i)%mod;
    for(int i=0;i<=m;i++) cin>>a[i];
    for(int k=0;k<=n;k++){
        int res=qsm(x,k)%mod;
//        cout<<res<<endl;
        int res1=0;
        for(int i=0;i<=m;i++){
            res1=(res1+a[i]*qsm(k,i)%mod)%mod;
//            cout<<res1<<" "<<a[i]<<" "<<qsm(k,i)<<endl;
        }
        res=(res*res1)%mod;
        res=(res*C(k,n))%mod;
        ans=(ans+res)%mod;
    }
    cout<<ans<<endl;
    return 0;
}