| 比赛 |
寒假集训2 |
评测结果 |
WWWWWWEEEEEEEEEEEEEE |
| 题目名称 |
组合数问题 |
最终得分 |
0 |
| 用户昵称 |
彭欣越 |
运行时间 |
3.071 s |
| 代码语言 |
C++ |
内存使用 |
6.71 MiB |
| 提交时间 |
2026-02-25 12:05:51 |
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=100010;
ll n,x,m,p,ans,a[N],f[N],c[1010][1010];
ll qpow (ll x,ll y) {
ll sum=1;
while (y) {
if (y&1) {
sum*=x;
sum%=p;
}
x*=x;
x%=p;
y>>=1;
}
return sum;
}
ll C (ll x,ll y) {
return qpow(f[y],p-2)%p*qpow(f[x-y],p-2)%p*f[x]%p;
}
int main () {
freopen("problem.in","r",stdin);
freopen("problem.out","w",stdout);
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin >> n >> x >> p >> m;
for (int i=0;i<=m;i++) cin >> a[i];
f[1]=1;
for (int i=2;i<=n;i++) f[i]=f[i-1]*i%p;
for (int i=1;i<=1000;i++) {
c[i][1]=i;
c[i][0]=1;
c[i][i]=1;
}
for (int i=2;i<=1000;i++) {
for (int j=i+1;j<=1000;j++) {
c[j][i]=(c[j-1][i]+c[j-1][i-1])%p;
}
}
if (n<=1000) {
for (int i=0;i<=n;i++) {
ll sum=0;
for (int j=0;j<=m;j++) {
sum+=a[j]*qpow(i,j)%p;
sum%p;
}
//cout << sum <<endl;
sum=sum*qpow(x,i)%p*c[n][i]%p;
ans+=sum;
}
cout << ans <<"\n";
}else{
for (int i=0;i<=n;i++) {
ll sum=a[0];
sum=sum*qpow(x,i)%p*C(n,i)%p;
ans+=sum;
}
cout << ans <<"\n";
}
return 0;
}