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;    
}
View Code

相关文章: