Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
42101 baka24 【BJ】T2 C++ 通过 100 830 MS 236572 KB 2742 2026-06-11 15:05:16

Tests(10/10):


#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)+1; 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]); if(i==n)continue; 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]); } f[i][j][0]=f[i][j][1]=f[i][j][2]=g[i][j][0]=g[i][j][1]=g[i][j][2]=0; } } int res=0; for(int j=0;j<=m;j++)add(res,(ll)f[n][j][0]*a[j]%Mod),f[n][j][0]=f[n][j][1]=f[n][j][2]=g[n][j][0]=g[n][j][1]=g[n][j][2]=0; 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; }


测评信息: