社区讨论

求助大佬 45分

P6620[省选联考 2020 A 卷] 组合数问题参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@lod3z6n4
此快照首次捕获于
2023/10/31 00:22
2 年前
此快照最后确认于
2023/11/05 10:40
2 年前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
#define re register
#define ll  long long
#define get getchar()
#define in inline
#define int  long long
int a[5000],s[5000][5000],p[5000],q[5000];
in int read()
{
	int t=0; char ch=get;
	while(ch<'0' || ch>'9') ch=get;
	while(ch<='9' && ch>='0') t=t*10+ch-'0', ch=get;
	return t;
} 
int fastpow(int a,int b,int p)
{ 
  int s=1;
  while(b)
  { 
  	if(b&1)
  	s=s*a%p;
  	b>>=1,a=a*a%p;
  }
  return s; 
}   
signed main()
{
 int n=read(),x=read(),mod=read(),k=read();
 for(int i=0;i<=k;i++)
 a[i]=read();
 s[0][0]=1;
 for(int i=1;i<=k;i++)
 for(int j=1;j<=i;j++)
 {  
    s[i][j]=(s[i-1][j-1]+s[i-1][j]*j%mod)%mod;
 }
 p[k]=fastpow(x+1,n-k,mod);
 for(int i=k-1;i>=0;i--)
 p[i]=p[i+1]*(x+1)%mod;
 q[0]=1;
 int ans=0,sum=0;
 for(int i=1;i<=k;i++)
 q[i]=q[i-1]*(n-i+1)%mod;
 for(int j=0;j<=k;j++)
 {
 sum=0;	
 for(int h=0;h<=j;h++)
 {
 	sum=(sum+s[j][h]%mod*q[h]%mod*p[h]%mod)%mod;
 }
  ans=(ans%mod+sum*a[j]%mod)%mod;
 }
 cout<<ans;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...