Flower_Rainbow_and_Balloon
题号:NC311640
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

\hspace{15pt}Flower 准备用一排气球来装饰房间。他有 n 个气球排成一行,气球的颜色有三种,分别为红色(使用字母 \texttt{`r'} 表示)、黄色(\texttt{`y'})和白色(\texttt{`w'})。不同颜色的气球能带来不同的愉悦度:红色为 2,黄色为 1,白色为 0

\hspace{15pt}为了达到最好的装饰效果,Flower 决定从中选取一个非空的连续子区间。选定区间后,他会邀请 Rainbow 对该区间施展一次魔法。Rainbow 的魔法包含以下两个步骤:
\hspace{23pt}\bullet\,第一步,「颜色反转」:选择是否将区间内所有红色气球全变成黄色、黄色气球全变成红色(同时进行)。
\hspace{23pt}\bullet\,第二步,「点缀」:他可以将区间内至多 m 个白色气球染成红色。
\hspace{15pt}Flower 希望经过 Rainbow 的魔法处理后,该区间的气球愉悦度之和至少k

\hspace{15pt}为了节省空间,Flower 希望他选取的这个区间长度尽可能短。请你帮助他判断这样的区间是否存在,如果存在,计算满足条件的最小区间长度。

输入描述:

\hspace{15pt}每个测试文件均包含多组测试数据。第一行输入一个整数 T\left(1\leq T\leq 10^5\right) 代表数据组数,每组测试数据描述如下:

\hspace{15pt}第一行输入三个整数 n, m, k \left(1 \leq n \leq 2 \times 10^5;\, 0 \leq m \leq n;\, 0 \leq k \leq 10^9\right),表示气球数量、「点缀」最多可处理的气球数量、期望的愉悦度之和;
\hspace{15pt}第二行输入一个长度为 n、仅由字符 \texttt{`r'}, \texttt{`w'}, \texttt{`y'} 组成的字符串 s,表示每个气球的颜色。

\hspace{15pt}除此之外,保证单个测试文件的 n 之和不超过 10^6

输出描述:

\hspace{15pt}对于每一组测试数据,新起一行。若存在合法的区间,输出最小区间长度;否则输出 -1
示例1

输入

复制
6
1 1 2
r
1 1 2
y
1 1 2
w
3 0 5
ryy
6 1 2
yyyywy
5 5 11
wwwww

输出

复制
1
1
1
3
1
-1

说明

\hspace{15pt}以下样例解释给出最优策略,但是不一定是唯一最优策略。下标从 1 开始。

\hspace{15pt}对于第一组样例,选取 [1, 1] 区间,「颜色反转」不互换,「点缀」染色 0 个,区间内的气球颜色变为 \texttt{(即不进行任何操作);
\hspace{15pt}对于第二组样例,选取 [1, 1] 区间,「颜色反转」互换,「点缀」染色 0 个,区间内的气球颜色变为 \texttt{
\hspace{15pt}对于第三组样例,选取 [1, 1] 区间,「颜色反转」不互换,「点缀」染色 1 个,区间内的气球颜色变为 \texttt{
\hspace{15pt}对于第四组样例,选取 [1, 3] 区间,「颜色反转」互换,「点缀」染色 0 个,区间内的气球颜色变为 \texttt{
\hspace{15pt}对于第五组样例,选取 [5, 5] 区间,「颜色反转」不互换,「点缀」染色 1 个,区间内的气球颜色变为 \texttt{