#CF4045. 双端队列
双端队列
题目描述
光头强有一个长度为 的数组,只包含 和 。在一个操作中,他移除数组的第一个或最后一个元素。
光头强将执行一系列操作,问使得数组的总和等于 的最小操作数是多少?如果在任何数量的操作后都无法获得总和 ,则应输出 。
输入格式
第一行包含单个整数 表示测试用例数。
每个测试用例的第一行包含两个整数 和 表示数组的长度和所需的元素之和。
每个测试用例的第二行包含 个整数 表示数组元素。
保证所有测试用例的 之和不超过 。
输出格式
对于每个测试用例,输出一个整数表示使数组的总和等于 所需的最小操作量,如果无法获得总和为 的数组,则输出 。
测试样例
7
3 1
1 0 0
3 1
1 1 0
9 3
0 1 0 1 1 1 0 0 1
6 4
1 1 1 1 1 1
5 1
0 0 1 1 0
16 2
1 1 0 0 1 0 0 1 1 0 0 0 0 0 1 1
6 3
1 0 1 0 0 0
0
1
3
2
2
7
-1
样例说明
在第一个测试用例中,整个数组的总和从一开始就是 ,因此我们不必进行任何操作。
在第二个测试用例中,数组的和是 ,我们希望它等于 ,因此我们应该删除第一个元素。数组变成 ,其和等于 。
在第三个测试用例中,数组的和是 ,我们需要它是 。我们可以通过去除前两个元素和最后一个元素,总共进行三次运算来获得这样的和。数组变成 ,其和等于 。