| 比赛 |
寒假集训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;
}