c++[ARC157B] XYYYX
时间: 2023-09-11 16:11:46 浏览: 30
以下是基于上述思路的 C++ 代码实现:
```cpp
#include <iostream>
#include <cstring>
using namespace std;
int main() {
int n, k;
string s;
cin >> n >> k >> s;
int count = 0;
for (int i = 0; i < n - 1; i++) {
if (s[i] == 'Y' && s[i + 1] == 'Y') {
count++;
}
}
int count1 = count;
for (int i = 0; i < k; i++) {
if (s[i] == 'X') {
count1 += (i > 0 && s[i - 1] == 'Y') + (i < n - 1 && s[i + 1] == 'Y');
}
}
int ans = count1;
for (int i = k; i < n; i++) {
if (s[i - k] == 'X') {
count1 -= (i > k && s[i - k - 1] == 'Y') + (i < n - 1 && s[i + 1] == 'Y');
}
if (s[i] == 'X') {
count1 += (i > 0 && s[i - 1] == 'Y') + (i < n - 1 && s[i + 1] == 'Y');
}
ans = max(ans, count1);
}
cout << ans << endl;
return 0;
}
```
其中,count 表示原始字符串中相邻 Y 的数量,count1 表示前 K 个字符操作后的相邻 Y 的数量,ans 表示最终的结果。在第一个 for 循环中,我们计算出了原始字符串中相邻 Y 的数量。在第二个 for 循环中,我们计算出了前 K 个字符操作后的相邻 Y 的数量。在第三个 for 循环中,我们模拟了对后面字符进行操作的过程,并记录最大的相邻 Y 的数量。最后输出 ans 即可。