解法
答え \(K\) について単調性があり,小さい \(K\) であれば成立する. Flip する区間を一つだけずらして再び flip すれば,両端だけ flip することが出来る. 基本はこれを繰り返せばよい.
しかし,真ん中はどうやっても flip できない. 左端に合わせて flip した場合と, 右端に合わせて flip した場合の重なった部分は, どうやっても flip できない. よって,この重なった部分は最初から全て同じ値である必要がある. 逆に,それを満たす \(K\) であれば常に可能.
使っている記号,マクロ等 "https://ecsmtlir.hatenablog.com/entry/2022/12/23/131925"
int main() {
// O(n), 累積和
string s; cin >> s;
ll n = s.length();
vll t(n+1);
rep(i,n) t[i+1] = s[i]=='1';
rep(i,n) t[i+1] += t[i];
ll ans = 0;
rep1(x,n){
ll d = x - ceil(n,2LL);
ll r = n/2 + d + (n%2);
ll l = n/2 - d;
if(l > r || t[r]-t[l]==0 || t[r]-t[l]==r-l){
chmax(ans, x);
}
}
cout << ans << endl;
return 0;
}