给出一个01序列,问你假如每次至少翻转长度k,使得最后全为0或1,这个k最大多少.
容易知道(百度知道) 一个数可以由(x,x+k+1)和(x+1,k+x+1)完成变换,所以不能这样做的是中间的连续段,长度为2k-n,所以求出中间最长连续段即可.
#include <iostream>
using namespace std;
#define debug(x) std::cerr << #x << " = " << (x) << std::endl
typedef long long LL;
const int MAXN = 1e3+17;
string str;
int main(int argc ,char const *argv[])
{
#ifdef GoodbyeMonkeyKing
freopen("Input.txt","r",stdin);freopen("Output.txt","w",stdout);
#endif
cin>>str;
int ans = 0,st = str.length()/2;
int src = str[st],c=1;
if(str.length()&1) c = 0,ans=1;
for (int i = 1; st-i >-1; ++i)
{
if(!((str[st-i]==str[st+i-c])&&(str[st+i-c]==src)))
break;
ans+=2;
}
cout<<(ans+str.length())/2<<endl;
return 0;
}