1. 程式人生 > >Face The Right Way POJ

Face The Right Way POJ

傳送門

題解:

附上程式碼:


#include<iostream>
#include<cstdio>
#include<cstring>

using namespace std;

const int MAXN=5e3+50;

int n;
int dir[MAXN];
int f[MAXN];

int calc(int k)
{
    memset(f,0,sizeof(f));
    int res=0,sum=0;
    for(int i=0;i+k<=n;i++){
        if((dir[i]+sum)%2!=0){
            res++;
            f[i]=1;
        }
        sum+=f[i];
        if(i-k+1>=0){
            sum-=f[i-k+1];
        }
    }
    for(int i=n-k+1;i<n;i++){
        if((dir[i]+sum)%2!=0){
            return -1;
        }
        if(i-k+1>=0){
            sum-=f[i-k+1];
        }
    }
    return res;
}

void solve()
{
    int K=1,M=n;
    for(int k=1;k<=n;k++){
        int m=calc(k);
        if(m>=0&&M>m){
            M=m;
            K=k;
        }
    }
    printf("%d %d\n",K,M);
}

int main()
{
    cin>>n;
    char c;
    for(int i=0;i<n;i++){
        cin>>c;
        if(c=='B'){
            dir[i]=1;
        }
    }
    solve();
    return 0;
}