AT3732 [ARC088B] Wide Flip题解
题目传送门
思路
\(\because\) 要求的是 \(k\) 的最大长度,
\(\therefore\) 无需考虑翻转次数。
对于第 \(i\) 个字符来说,假设它不等于前 \(i - 1\) 个字符,前 \(i - 1\) 个字符又相等,那么为了最后的结果,要么选择翻转前 \(i\) 个字符,要么翻转后 \(n - i\) 个字符。
因此可以去枚举字符串,寻找第 \(i - 1\) 个字符与第 \(i\) 个字符不同的 \(i\),在 $i $ 和 \(n - i\) 中去取最大的一个。
\(\because\) 要求最大的长度 \(k\),
\(\therefore\) 在每一个字符进行翻转的最大值中选最小的一个即可。
代码如下:
#include <bits/stdc++.h>
using namespace std;
string s;
int ans = INT_MAX;
int main() {
cin >> s;
int len = s.size () ;
for (int i = 1; i < len ; i ++)
if (s[i] != s[i - 1])
ans = min (ans, max (i, len - i) ) ;
cout << min (ans, len) << endl;
return 0;
}