honoka的键盘
题目背景
honoka 有一个只有两个键的键盘。
题目描述
一天,她打出了一个只有这两个字符的字符串。当这个字符串里含有 VK
这个字符串的时候,honoka 就特别喜欢这个字符串。所以,她想改变至多一个字符(或者不做任何改变)来最大化这个字符串内 VK
出现的次数。给出原来的字符串,请计算她最多能使这个字符串内出现多少次 VK
(只有当 V
和 K
正好相邻时,我们认为出现了 VK
。)
输入格式
第一行给出一个数字 n n n,代表字符串的长度。
第二行给出一个字符串 s s s。
输出格式
第一行输出一个整数代表所求答案。
样例 #1
样例输入 #1
2
VK
样例输出 #1
1
样例 #2
样例输入 #2
2
VV
样例输出 #2
1
样例 #3
样例输入 #3
1
V
样例输出 #3
0
样例 #4
样例输入 #4
20
VKKKKKKKKKVVVVVVVVVK
样例输出 #4
3
样例 #5
样例输入 #5
4
KVKV
样例输出 #5
1
提示
对于 100 % 100\% 100% 的数据, 1 ≤ n ≤ 100 1\le n\le 100 1≤n≤100。
题解
#include<iostream>
// #include<string>
using namespace std;
int main()
{
int n,sum=0;
cin >> n;
char last = 'X';
string s;
bool iscan = false,stuck = false;
cin >> s;
for(int i=0;i<n;i++)
{
if((last == 'V')&&(s[i]=='K')){
sum++;
}
//VKV不可修改
//VKVV可+1
//VKVVK不可+1
//KVKKK可+1
//KK和VV可+1
if((i==n-1)&&(s[i]=='V')&&(last=='V')) iscan = true;
if((i==1)&&(s[i]=='K')&&(last=='K')) iscan = true;
last = s[i];
}
if(s.find("KKK")!=s.npos)iscan = true;
if(s.find("VVV")!=s.npos)iscan = true;
if(n == 2 && sum == 0 && (s.find("KV")==s.npos))iscan = true;
if(iscan)sum++;
cout << sum;
return 0;
}