#CF4045. 双端队列

双端队列

题目描述

光头强有一个长度为 nn 的数组,只包含 0011。在一个操作中,他移除数组的第一个或最后一个元素。

光头强将执行一系列操作,问使得数组的总和等于 ss 的最小操作数是多少?如果在任何数量的操作后都无法获得总和 ss,则应输出 1-1

输入格式

第一行包含单个整数 t(1t104)t(1≤t≤10^4) 表示测试用例数。

每个测试用例的第一行包含两个整数 nns(1n,s2×105)s(1≤n,s≤2\times 10^5) 表示数组的长度和所需的元素之和。

每个测试用例的第二行包含 nn 个整数 ai(0ai1)a_i(0≤a_i≤1) 表示数组元素。

保证所有测试用例的 nn 之和不超过 2×1052\times 10^5

输出格式

对于每个测试用例,输出一个整数表示使数组的总和等于 ss 所需的最小操作量,如果无法获得总和为 ss 的数组,则输出 1-1

测试样例

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

样例说明

在第一个测试用例中,整个数组的总和从一开始就是 11,因此我们不必进行任何操作。

在第二个测试用例中,数组的和是 22,我们希望它等于 11,因此我们应该删除第一个元素。数组变成 [1,0][1,0],其和等于 11

在第三个测试用例中,数组的和是 55,我们需要它是 33。我们可以通过去除前两个元素和最后一个元素,总共进行三次运算来获得这样的和。数组变成 [0,1,1,1,0,0][0,1,1,1,0,0],其和等于 33