Luogu P3741 honoka的键盘
题目背景
honoka 有一个只有两个键的键盘。
题目描述
一天,她打出了一个只有这两个字符的字符串。当这个字符串里含有"VK"这个字符串的时候,honoka 就特别喜欢这个字符串。所以,她想改变至多一个字符(或者不做任何改变)来最大化这个字符串内"VK"出现的次数。给出原来的字符串,请计算她最多能使这个字符串内出现多少次"VK"。(只有当"V"和"K"正好相邻时,我们认为出现了"VK"。)
输入输出格式
输入格式:
第一行给出一个数字 n,代表字符串的长度。第二行给出一个字符串 s。
输出格式:
第一行输出一个整数代表所求答案。
输入输出样例
输入样例#1:
2 VK
输出样例#1:
1
输入样例#2:
2 VV
输出样例#2:
1
输入样例#3:
1 V
输出样例#3:
0
输入样例#4:
20 VKKKKKKKKKVVVVVVVVVK
输出样例#4:
3
输入样例#5:
4 KVKV
输出样例#5:
1
说明
对于 100%的数据,1<=n<=100 。
Solution
可以说是水题吧……(但要细心)
大概思路:
- 先判断字符串里VK的个数,再手动操作让判断的那部分语句忽视已计算过的“VK”。
举个栗子:字符串“VVKK”,先计算已有的VK,然后在VK间加个空格(其实什么都行),字符串就会变成“VV KK”,pos语句就会完美忽略VK。接下来,在VK前后各加一个空格,以防在后面改变一个字符时收到干扰(字符串变为"V V K K")。
- 改变字符时,只要判断字符串里是否有"VV"或“KK”就行了("VV"可以把第二个“V”改成”K“,“KK”可以把第一个“K”改成“V”),有即计数+1。
——————分割不完全的分割线——————
pascal程序如下:
var n,m:longint; s:string; begin readln(n);//n好像并没有什么卵用 readln(s); while pos('VK',s)<>0 do//判断是否有现成的VK begin inc(m);//计数器+1 insert(' ',s,pos('VK',s));//VK左边增加空格 insert(' ',s,pos('VK',s)+2);//VK右边增加空格 insert(' ',s,pos('VK',s)+1);//VK中间增加空格 end; if (pos('VV',s)<>0)or(pos('KK',s)<>0) then//判断字符串是否有“VV”或“KK” writeln(m+1) else writeln(m); end.