提交时间:2026-06-11 15:02:15
运行 ID: 42100
#include<bits/stdc++.h> using namespace std; #define ll long long const int MAXN=5010; int Mod; int read(){int x=0,f=1;char c=getchar();while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9')x=(x<<1)+(x<<3)+(c^48),c=getchar();return x*f;} void add(int &x,int y){x+=y;if(x>=Mod)x-=Mod;} int Pow(int x,int y){int rt=1;while(y){if(y&1)rt=rt*x%Mod;x=x*x%Mod,y>>=1;}return rt;} int n,ans,f[MAXN][MAXN][3],g[MAXN][MAXN][3],a[MAXN]; int solve(int k){ int m=k==1?n:n/(k-1)+3; for(int i=0;i<=n;i++)for(int j=0;j<=m;j++)g[i][j][0]=g[i][j][1]=f[i][j][0]=f[i][j][1]=f[i][j][2]=g[i][j][2]=0; f[0][0][0]=1; for(int i=0;i<=n;i++){ for(int j=0;j<=m;j++){ add(f[i][j][0],g[i][j][0]); add(f[i][j][1],g[i][j][1]); add(f[i][j][2],g[i][j][2]); add(f[i+1][j][0],f[i][j][0]); if(k==1){ add(g[i+1][j+1][2],g[i][j][2]); add(g[i+1][j][1],f[i][j][2]); add(g[i+1][j][2],f[i][j][1]); add(g[i+1][j+1][0],g[i][j][0]); add(f[i+1][j+1][1],f[i][j][0]); add(g[i+2][j+1][1],f[i][j][0]); add(g[i+1][j+1][1],g[i][j][1]); add(f[i+1][j+1][0],f[i][j][1]); add(g[i+2][j+1][0],f[i][j][1]); } else{ add(g[i+1][j][2],g[i][j][2]); add(f[i+k-1][j+1][1],f[i][j][2]); add(g[i+1][j][1],f[i][j][2]); add(f[i+k-1][j][1],Mod-f[i][j][2]); add(f[i+k-1][j+1][2],f[i][j][1]); add(g[i+1][j][2],f[i][j][1]); add(f[i+k-1][j][2],Mod-f[i][j][1]); add(g[i+1][j][0],g[i][j][0]); add(f[i+k][j+1][1],f[i][j][0]); add(g[i+1][j][1],f[i][j][0]); add(f[i+k][j][1],Mod-f[i][j][0]); add(g[i+1][j][1],g[i][j][1]); add(f[i+k][j+1][0],f[i][j][1]); add(g[i+1][j][0],f[i][j][1]); add(f[i+k][j][0],Mod-f[i][j][1]); } } } int res=0,tmp=0; for(int j=0;j<=m;j++)if(f[n][j][0])add(res,(ll)f[n][j][0]*a[j]%Mod),tmp=j; return res; } void slv(){ n=read(),Mod=read(); bool fl=0; for(int i=0;i<=n;i++)a[i]=read(),fl|=a[i]!=1; if(fl){ for(int i=1;i<n;i++){ printf("%d\n",solve(i)); } } else { int tmp=solve(1); for(int i=1;i<n;i++)printf("%d\n",tmp); } } signed main(){ // freopen("1.in","r",stdin);freopen("1.out","w",stdout); slv(); // cerr<<clock()*1.0/CLOCKS_PER_SEC<<"s\n"; return 0; }