#Z1029. 循环子段

循环子段

题目描述

有一个长度为 nn 的数组 a=[a1,a2,,an]a = [a_1, a_2, \dots, a_n],将这个数组无限重复得到一个无穷序列。

你需要从这个无穷序列中截取一段连续的子段,使该子段中所有元素之和恰好等于 tt。如果存在多种截取方案,选择长度最长的一种。如果没有任何方案满足和为 tt,则输出无解。

输入格式

第一行两个整数 n,tn, t,表示数组长度和目标总和。

第二行 nn 个整数 a1,a2,,ana_1, a_2, \dots, a_n

输出格式

若不存在方案,输出一行 No

若存在方案,第一行输出 Yes,第二行输出一个整数表示最长子段长度。

样例

3 9
2 1 2
Yes
5
3 9
2 2 2
No
1 5
1
Yes
5

样例解释

对于样例 1:数组 [2,1,2][2,1,2] 无限重复得到 [2,1,2,2,1,2,2,1,2,][2,1,2,2,1,2,2,1,2,\dots]。可以从第 3 个数开始取 [2,2,1,2,2][2,2,1,2,2],和为 2+2+1+2+2=92+2+1+2+2=9,长度为 5。

对于样例 2:数组全是 2,所有元素和都是 2 的倍数。9 不是 2 的倍数,故无解。

对于样例 3:数组仅有一个元素 11,无限重复为 [1,1,1,][1,1,1,\dots]。截取和等于 55 的最长子段为连续 5511,长度为 55

数据范围与约定

子任务 分值 限制
11 3030 n100n \le 100t104t \le 10^4
22 n105n \le 10^5,保证所有 aia_i 相等
33 4040 n105n \le 10^5t1018t \le 10^{18}ai109a_i \le 10^9

对于所有数据,1ai1091 \le a_i \le 10^9

下发样例

下发样例下载