#include <iostream>
#include <map>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <vector>
#include <set>
using namespace std;
#define maxn 5000 + 10
#define INF 0x7ffffff
int n;
int a[maxn];
int f[maxn]; ///区间[i, i+k-1]是否进行反转
int mark;
int Cal(int k)
{
memset(f, 0, sizeof(f));
int res = 0;
int sum = 0; ///每次使得sum的值为(i-k+1 ~ i-1)的f[i]的和
for(int i=1; i<=n-k+1; i++)
{
if((sum&1) && a[i])
{
f[i]++;
res++;
}
if(!(sum&1) && !a[i])
{
f[i]++;
res++;
}
sum += f[i];
if(i-k+1 > 0) sum -= f[i-k+1];
}
for(int i=n-k+2; i<=n; i++)
{
if((sum + a[i]) % 2 == 0)
{
return INF;
break;
}
if(i-k+1 > 0)
sum -= f[i-k+1];
}
return res;
}
void solve()
{
mark = -1;
int Min = INF;
for(int k=1; k<=n; k++)
{
int tmp = Cal(k);
if(tmp < Min)
{
Min = tmp;
mark = k;
}
}
cout<<mark<<" "<<Min<<endl;
}
int main()
{
while(~scanf("%d", &n))
{
char ch;
for(int i=1; i<=n; i++)
{
getchar();
scanf("%c", &ch);
if(ch == 'F') a[i] = 1;
else a[i] = 0;
}
solve();
}
return 0;
}
POJ 3276 Face The Right Way
最新推荐文章于 2023-09-11 08:57:58 发布