use[]代表以这一位开始长度为k的数组有没有翻转。
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <set>
#include <vector>
#include <algorithm>
#define N 5002
#define MAX 100010000
int cows[N];
int use[N];
int main()
{
int n;
scanf("%d",&n);
char tmp;
for(int i = 1; i<=n; i++)
{
getchar();
scanf("%c",&tmp);
if(tmp == 'B')
{
cows[i] = 0;
}
else
{
cows[i] = 1;
}
}
int ncount_min = MAX;
int k_min = 1;
int ncount;
for(int k = 1; k<=n; k++)
{
ncount = 0;
memset(use,0,sizeof(use));
int ret = 0;
bool flag = true;
for(int i = 1; i<=n; i++)
{
if((i-k)>0)
{
ret-=use[i-k];
}
if(i<=(n-k)+1)
{
if(cows[i] == 0&& ret%2 ==0)
{
ret++;
ncount++;
use[i] = 1;
}
else if(cows[i] == 0&& ret%2==1)
{
;
}
else if(cows[i] == 1 && ret%2 ==0 )
{
;
}
else if(cows[i] ==1 && ret%2 ==1)
{
ret++;
ncount++;
use[i] = 1;
}
}
else
{
if((cows[i] == 0&& ret%2 ==0)||(cows[i] ==1 && ret%2 ==1))
{
flag = false;
break;
}
}
}
if(flag == true)
{
if(ncount<ncount_min)
{
ncount_min = ncount;
k_min = k;
}
}
}
printf("%d %d\n",k_min,ncount_min);
return 0;
}