题目描述
有一个长度为 n 的数组 a=[a1,a2,…,an],将这个数组无限重复得到一个无穷序列。
你需要从这个无穷序列中截取一段连续的子段,使该子段中所有元素之和恰好等于 t。如果存在多种截取方案,选择长度最长的一种。如果没有任何方案满足和为 t,则输出无解。
输入格式
第一行两个整数 n,t,表示数组长度和目标总和。
第二行 n 个整数 a1,a2,…,an。
输出格式
若不存在方案,输出一行 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,…]。可以从第 3 个数开始取 [2,2,1,2,2],和为 2+2+1+2+2=9,长度为 5。
对于样例 2:数组全是 2,所有元素和都是 2 的倍数。9 不是 2 的倍数,故无解。
对于样例 3:数组仅有一个元素 1,无限重复为 [1,1,1,…]。截取和等于 5 的最长子段为连续 5 个 1,长度为 5。
数据范围与约定
| 子任务 |
分值 |
限制 |
| 1 |
30 |
n≤100,t≤104 |
| 2 |
n≤105,保证所有 ai 相等 |
| 3 |
40 |
n≤105,t≤1018,ai≤109 |
对于所有数据,1≤ai≤109。
下发样例
下发样例下载