2026模拟卷(一)T3 和为 K 的子段
题目背景
小 Z 在分析一组带正负号的测量偏差。他想知道,哪一段连续的测量值加起来正好等于某个给定常数。
题目描述
给定一个长度为 n 的整数序列 a1,a2,…,an,以及一个整数 K。
请你求出最长的连续子段 al,al+1,…,ar(1≤l≤r≤n),使得
al+al+1+⋯+ar=K
输出这个最长子段的长度 r−l+1。如果不存在任何连续子段的和等于 K,输出 0。
输入格式
第一行两个整数 n 与 K,用一个空格隔开。
第二行 n 个整数 a1,a2,…,an,相邻两个整数之间用一个空格隔开。
输出格式
共一行,一个整数,表示最长子段的长度;若不存在则输出 0。
样例输入
8 0
3 -1 1 2 -2 4 -3 1
样例输出
4
样例解释
先看符合条件的一段:a2 到 a5 为 −1+1+2−2=0=K,长度 5−2+1=4。
再看有没有更长的。长度 5 的子段共有四段:
| 起点 |
子段 |
元素和 |
| 1 |
3 -1 1 2 -2 |
3 |
| 2 |
-1 1 2 -2 4 |
4 |
| 3 |
1 2 -2 4 -3 |
2 |
| 4 |
2 -2 4 -3 1 |
都不是 0。长度 6、7、8 的子段和分别为 7、3、4(前 8 项总和为 3),也都不等于 0。所以答案是 4。
数据范围
| 子任务 |
分值 |
n 的限制 |
ai 的限制 |
| 1 |
20 |
n≤100 |
∣ai∣≤109 |
| 2 |
30 |
n≤5000 |
| 3 |
20 |
n≤2×105 |
ai≥1 |
| 4 |
30 |
∣ai∣≤109 |
对于 100% 的数据,1≤n≤2×105,∣ai∣≤109,∣K∣≤1014。