CF1692E Binary Deque

题目描述

Slavic 有一个长度为 $n$ 的数组,数组中的元素只包含 $0$ 和 $1$。每次操作,他可以移除数组的第一个或最后一个元素。 请问,Slavic 至少需要进行多少次操作,才能使数组所有元素的和等于 $s$?如果无论进行多少次操作都无法得到和为 $s$ 的数组,请输出 $-1$。

输入格式

第一行包含一个整数 $t$($1 \leq t \leq 10^4$),表示测试用例的数量。 每个测试用例的第一行包含两个整数 $n$ 和 $s$($1 \leq n, s \leq 2 \times 10^5$),分别表示数组的长度和所需的元素和。 每个测试用例的第二行包含 $n$ 个整数 $a_i$($0 \leq a_i \leq 1$),表示数组的元素。 保证所有测试用例中 $n$ 的总和不超过 $2 \times 10^5$。

输出格式

对于每个测试用例,输出一个整数,表示使数组所有元素的和等于 $s$ 所需的最小操作次数。如果无法得到和为 $s$ 的数组,输出 $-1$。

说明/提示

在第一个测试用例中,整个数组的和本来就是 $1$,所以不需要进行任何操作。 在第二个测试用例中,数组的和为 $2$,我们希望它变成 $1$,所以应该移除第一个元素。数组变为 $[1, 0]$,其和为 $1$。 在第三个测试用例中,数组的和为 $5$,我们需要它变为 $3$。可以通过移除前两个元素和最后一个元素(共三次操作)实现。数组变为 $[0, 1, 1, 1, 0, 0]$,其和为 $3$。 由 ChatGPT 4.1 翻译