對我這種弱智來說這可太難理解了
https://blog.csdn.net/qq_34374664/article/details/53028870
看理解了題解
這個sum我的理解是他不僅是個k長度尺子,也會記錄在長度爲k的【i,i+k】區間內,每個點翻轉的次數
#include<iostream>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
int f[5050];
int dis[5050];
int n,am,ak;
int slove(int k)
{
int res=0;
int sum=0;
memset(f,0,sizeof(f));
for(int i=0;i<n-k+1;i++)
{
if((sum+dis[i])%2)
{
res++;
sum++;
f[i]=1;
}
if(i-k+1>=0)
sum-=f[i-k+1];
}
for(int i=n-k+1;i<n;i++)
{
if((sum+dis[i])%2) return -1;
if(i-k+1>=0)
sum-=f[i-k+1];
}
return res;
}
int main()
{
string s;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>s;
if(s[0]=='B')
dis[i]=1;
else if(s[1]=='F')
dis[i]=0;
}/*
for(int i=0;i<n;i++)
cout<<dis[i]<<endl;*/
am=n+1;
for(int i=1;i<=n;i++)
{
int m=slove(i);
if(m>=0&&m<am)
{
am=m;
ak=i;
}
else if(m==am&&i<ak)
ak=i;
}
cout<<ak<<" "<<am<<endl;
return 0;
}