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;
}

完结撒花 \(\sim\sim\sim\)

posted @ 2023-07-01 11:22  liukejie  阅读(8)  评论(0编辑  收藏  举报