Luogu P6620 [省选联考 2020 A 卷] 组合数问题

题链
组合数结合下降幂的应用(我觉得组合数和下降幂真配)
见本
时间复杂度\(O(m^2)\)
注意预处理第二类斯特林数,写错了2次

#include<bits/stdc++.h>
#define ll long long
using namespace std;

const int N=1005;
int n,x,p,m,a[N],s[N][N],b[N];
inline int mo(int x) {
	return x>=p?x-p:x;
}
inline int ksm(ll a,int b) {
	ll ret=1;
	while(b) {
		if(b&1) ret=ret*a%p;
		a=a*a%p,b>>=1;
	}
	return ret;
}
int main() {
	scanf("%d%d%d%d",&n,&x,&p,&m);
	for(int i=0;i<=m;i++)  scanf("%d",&a[i]);
	s[0][0]=1;
	for(int j=1;j<=m;j++) {
		s[j][j]=1;
		for(int i=j+1;i<=m;i++) {
			s[i][j]=((ll)s[i-1][j-1]+(ll)j*s[i-1][j])%p;
		}
	}
	for(int j=0;j<=m;j++) {
		for(int i=j;i<=m;i++) {
			b[j]=((ll)a[i]*s[i][j]+b[j])%p;
		}
	}
	int ans=(ll)b[0]*ksm(1+x,n)%p,h=1;
	for(int i=1;i<=m;i++) {
		h=(ll)h*(n-i+1)%p;
		ans=((ll)b[i]*h%p*ksm(x,i)%p*ksm(1+x,n-i)+ans)%p;
	}
	printf("%d\n",ans);
	return 0;
}
posted @ 2021-04-07 14:49  wwwsfff  阅读(61)  评论(0编辑  收藏  举报