#CF2042C. 竞争性钓鱼
竞争性钓鱼
C. 竞争性钓鱼
时间限制:2 秒
内存限制:512 MB
爱丽丝和鲍勃参加一场钓鱼比赛!他们一共钓到了 条鱼,编号从 到 (鱼的编号越大,表示鱼越大)。其中一些鱼被爱丽丝钓到,另一些被鲍勃钓到。
他们的表现按以下方式评估:
首先,选择一个整数 ,然后将所有鱼分成 个非空组。
第一组应包含若干(至少一条)最小的鱼,第二组应包含若干(至少一条)次小的鱼,以此类推。每条鱼恰好属于一个组,每个组是连续的一段鱼。注意,组是按照这个顺序编号的;例如,第二组的鱼不可能比第一组的鱼小,因为第一组包含最小的鱼。
然后,每条鱼根据其所在组的编号被赋予一个值:第一组中的每条鱼的值等于 ,第二组中的每条鱼的值等于 ,以此类推。所以,第 组中的每条鱼的值为 。
每个参赛者的得分就是他/她钓到的所有鱼的值之和。
你希望鲍勃的得分至少比爱丽丝的得分多 分。为了实现这一点,你需要将鱼分成若干组,问最少需要分成多少组(即最小的 )?如果不可能,则报告这一点。
输入
第一行包含一个整数 ()—— 测试用例的数量。
每个测试用例的第一行包含两个整数 和 (;)。
第二行包含一个长度为 的字符串,第 个字符是 (表示第 条鱼由爱丽丝钓到)或 (表示由鲍勃钓到)。
输入附加约束:所有测试用例的 之和不超过 。
输出
对于每个测试用例,输出一个整数 —— 最少需要分的组数 ;如果不可能,输出 。
示例
输入:
7
4 1
1001
4 1
1010
4 1
0110
4 2
0110
6 3
001110
10 20
1111111111
5 11
11111
输出:
2
-1
2
-1
3
4
-1
说明
- 在第一个测试用例中,可以将鱼分成如下组:前三条鱼为第 组,最后一条鱼为第 组。此时鲍勃的得分为 ,爱丽丝的得分为 。
- 在第三个测试用例中,可以将鱼分成如下组:第一条鱼为第 组,后三条鱼为第 组。此时鲍勃的得分为 ,爱丽丝的得分为 。