思路:用一个数组前标记和后标记优化中间的遍历,前标记+1后标记-1,这样就能判断是否反转
/*
I am nothing but I must be everything.
*/
#include <map>
#include <queue>
#include <vector>
#include <cstdio>
#include <cstring>
#include <utility>
#define maxn 5005
#include <iostream>
#include <algorithm>
#define inf 0x3f3f3f3f
typedef long long ll;
typedef unsigned long long ull;
using namespace std;
ll a[maxn];
ll b[maxn];
int main()
{
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
ll n;
cin >> n;
for(int i = 1; i <= n; i ++)
{
char c;
cin >> c;
if(c == 'F') a[i] = 0;
else a[i] = 1;
}
ll mi = 99999999999;
ll mark = 1,total,flag,sum = 0;
for(int i = 1; i <= n; i ++)
{
memset(b,0,sizeof(b));
flag = 0,total = 0,sum = 0;
for(int j = 1; j + i <= n + 1; j ++)
{
sum += b[j];
if((sum + a[j]) % 2 != 0)
{
b[j] += 1;
sum += 1;
b[j + i] -= 1;
total ++;
}
}
for(int k = n - i + 2; k <= n; k ++)
{
sum += b[k];
if((sum + a[k]) % 2 != 0)
{
flag = 1;
break;
}
}
if(flag == 1)continue;
if(mi > total)
{
mi = total;
mark = i;
}
}
cout << mark << " " << mi << endl;
return 0;
}