A. Vicious Keyboard(Codeforces 801A)
思路
本题的入手点在于,由于最多只能修改一个字符,所以可以枚举被修改的字符。
枚举被修改的字符,然后统计 VK 出现的次数,更新答案。注意还可以不是用修改的机会
代码
#include <bits/stdc++.h>
using namespace std;
string s;
int cnt, ans;
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cin >> s;
// 枚举被修改的字符
for(int i = 0; i < s.size(); i++) {
// 修改字符
if(s[i] == 'V') {
s[i] = 'K';
}
else {
s[i] = 'V';
}
cnt = 0;
for(int j = 0; j < s.size() - 1; j++) {
if(s[j] == 'V' && s[j + 1] == 'K') {
cnt++;
}
}
ans = max(ans, cnt);
// 还原被修改的字符
if(s[i] == 'V') {
s[i] = 'K';
}
else {
s[i] = 'V';
}
}
cnt = 0;
// 统计不修改的情况
for(int j = 0; j < s.size() - 1; j++) {
if(s[j] == 'V' && s[j + 1] == 'K') {
cnt++;
}
}
ans = max(ans, cnt);
cout << ans << endl;
return 0;
}
B. Valued Keys(Codeforces 801B)
思路
本题的入手点在于寻找最特殊的构造方式。
设输入的字符串为 x 和