CF771D Bear and Company
题目描述
熊 Limak 正在为一项编程竞赛准备题目。当然,在题面中提及赞助商的名字是不专业的。Limak 十分认真,他打算修改一些单词。为了保证题目依然可读,他会尽量少地修改每个单词。
Limak 有一个由大写英文字母组成的字符串 $s$。在一次操作中,他可以交换字符串中相邻的两个字母。例如,他可以将字符串 “ABBC” 通过一次操作变成 “BABC” 或 “ABCB”。
Limak 希望将字符串变成一个不包含子串 “VK” 的字符串(即不能出现字母 ‘V’ 紧跟 ‘K’ 的情况)。可以证明,对于任意初始字符串 $s$,总是有可能达到这个目标。
Limak 最少需要进行多少次操作?
输入格式
输入的第一行包含一个整数 $n$($1 \leq n \leq 75$)——字符串的长度。
第二行包含一个长度为 $n$ 的仅由大写英文字母组成的字符串 $s$。
输出格式
输出一个整数,表示 Limak 至少需要多少次操作,才能得到一个不包含子串 “VK” 的字符串。
说明/提示
在第一个样例中,初始字符串为 “VKVK”。最少需要 $3$ 次操作。一种最优的移动方案如下:
1. 交换最后两个字母,字符串变为 “VKKV”。
2. 交换前两个字母,字符串变为 “KVKV”。
3. 交换第二和第三个字母,字符串变为 “KKVV”。此时字符串中没有子串 “VK”。
在第二个样例中,有两种最优的操作方案。一种是 “BVVKV” $→$ “VBVKV” $→$ “VVBKV”,另一种是 “BVVKV” $→$ “BVKVV” $→$ “BKVVV”。
在第五个样例中,不需要任何交换操作。
由 ChatGPT 5 翻译