#1311. 双子段最小和
双子段最小和
题目描述
给定一个长度为 的非负整数数组 。
你需要从数组中选择至多两个互不重叠的连续子段,使得这些子段中所有元素的总和恰好等于给定的目标值 。
请计算出,在满足条件的情况下,这两个连续子段所包含的元素总数(即子段长度之和)最小是多少?如果无法找到满足条件的子段组合,请输出 -1。
输入格式
第一行包含一个正整数 —— 表示测试用例的数量。
对于每个测试用例:
- 第一行包含两个正整数 和 —— 分别表示数组的长度和目标总和。
- 第二行包含 个非负整数 —— 表示数组的元素。
输出格式
对于每个测试用例,输出一行,格式为 Case #x: y,其中 x 是测试用例编号(从 开始),y 是所需的最少元素总数。如果不可能实现,则 y 为 -1。
样例输入 1
4
6 8
1 2 3 1 2 3
4 10
6 7 5 2
6 8
3 1 2 1 3 1
4 6
3 1 2 0
样例输出 1
Case #1: 3
Case #2: -1
Case #3: 4
Case #4: 3
说明
样例解释
- 在样例 中,第一个子段可以选择下标为 和 的元素(值为 和 ),第二个子段可以选择下标为 的元素(值为 )。总和为 ,总长度为 。
- 在样例 中,无法用至多 个连续子段得到总和 。
- 在样例 中,第一个子段可以选择下标为 的元素(值为 ),第二个子段可以选择下标为 的元素(值为 )。总和为 ,总长度为 。注意:我们不能取 的组合(对应下标 的元素),因为这需要 个连续子段,不符合题意。
- 在样例 中,选择单个子段包含下标 的元素(值为 ),总和为 ,总长度为 。
数据范围
对于所有测试点,保证:
- 。
- 。
- 。
- ()。
- 保证所有的输入数值均为整数。