这招太狠了烤学妹
题号:NC296410
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 512 M,其他语言1024 M
64bit IO Format: %lld

题目描述

你发现你的一个朋友已经开始玩暴走P的 Master 谱面了,这时你打算做点坏事。
        你找出了朋友的一个长度为 n 的音游打击序列,为了简化模型,这个序列只有 \text{o}(命中)和 \text{x}(不命中)。

        下面定义音游打击序列每个位置的当前连击数:
  • 有一个累加器,初始值设为 0
  • 将序列从左到右依次扫描,对于当前某个字符,若它是 \text{o},那么累加器加 1,否则累加器重置为 0
  • 序列每个位置的当前连击数,等于扫描过这个位置后累加器的值。
  • 例如,对于音游打击序列 \text{oooxoo},每个位置的当前连击数依次是 1,2,3,0,1,2

        整个音游打击序列的分数,等于打击序列每个位置的当前连击数之和。例如,对于音游打击序列 \text{oooxoo},分数等于 1+2+3+0+1+2=9

        现在你有 k 次动手脚的机会,每次机会可以将这个打击序列的一个 \text{o} 修改为 \text{x}k 次机会可以全部使用、部分使用或完全不使用。你想知道所有修改方案中,分数的最小值可以是多少。

输入描述:

    每个测试文件均包含多组测试数据。第一行输入一个整数 T \left(1 \le T \le 10^4\right) 代表数据组数,每组测试数据描述如下:
    第一行,输入两个正整数 n,k \ (1 \le n \le 10^6, \ 1 \le k \le n) 代表序列的长度和机会的次数。
    第二行,输入一个长度为 n 的字符串,保证出现的字符只会是 \text{o}\text{x}
    对于同一个测试点,保证所有数据的 n 之和不超过 10^6

输出描述:

    对于每组数据,输出一行一个整数,表示所有修改方案中,分数的最小值可以是多少。
示例1

输入

复制
2
4 2
oxoo
6 1
oooxoo

输出

复制
1
5

说明

    对于第一组数据,把任意两个 \text{o} 修改为 \text{x},最终的分数都是 1
    对于第二组数据,把左数第二个 \text{o} 修改为 \text{x},分数为 1+0+1+0+1+2=5,可以验证没有分数更小的方案。