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

可以说是水题吧……(但要细心)

大概思路:

  1. 先判断字符串里VK的个数,再手动操作让判断的那部分语句忽视已计算过的“VK”。

举个栗子:字符串“VVKK”,先计算已有的VK,然后在VK间加个空格(其实什么都行),字符串就会变成“VV KK”,pos语句就会完美忽略VK。接下来,在VK前后各加一个空格,以防在后面改变一个字符时收到干扰(字符串变为"V V K K")。

  1. 改变字符时,只要判断字符串里是否有"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.
posted @ 2017-08-18 14:04  qbwhtc  阅读(188)  评论(0编辑  收藏  举报