A组
T1.vode 没有硝烟的战争
#include<iostream> #include<cstdio> #include<set> using namespace std; inline int rd(){ int ret=0,f=1;char c; while(c=getchar(),!isdigit(c))f=c=='-'?-1:1; while(isdigit(c))ret=ret*10+c-'0',c=getchar(); return ret*f; } const int MAXN=5005; int n,m,num; int a[MAXN],tot; bool f[MAXN<<1][MAXN]; int main(){ freopen("vode.in","r",stdin); freopen("vode.out","w",stdout); n=rd();m=rd();num=rd(); for(int i=1;i<=n;i++){ a[i]=rd(); } for(int i=n+m-1;i>=1;i--){ int sum=0; for(int j=m-1;j>=1;j--){ int k=i%n?i%n:n; int nxt=k==n?1:k+1; if(a[k]==a[nxt]) f[i][j]=sum>0; else f[i][j]=sum==0; sum+=f[i+1][j]; if(j+num<=m) sum-=f[i+1][j+num]; } } for(int i=1;i<=n;i++){ for(int j=1;j<=num;j++){ f[i][0]|=f[i][j]; } } for(int i=1;i<=n;i++) printf("%d ",f[i][0]?a[i]:a[i]^1); return 0; }