#투포인터 활용 문제이다.
보통 합이 같을 때를 따지는데, 여기서는 크더라도 제일 근접한 합을 따진다.
#define _CRT_SECURE_NO_WARNINGS
// 1806 부분합
#include <iostream>
using namespace std;
int main() {
int n, start = 0, end = 0;
int a[100001];
int s, sum = 0;
scanf("%d %d", &n, &s);
int min = n + 1;
for (int i = 0; i < n; i++) scanf("%d", &a[i]);
sum = a[0];
while (start <= end && end < n) {
if (sum < s) {
end++;
sum += a[end];
}
else if (sum == s) {
if (end - start + 1 < min) min = end - start + 1;
end++;
sum += a[end];
}
else if (sum > s) {
if (end - start + 1 < min) min = end - start + 1;
sum -= a[start];
start++;
}
}
if (min > n) printf("0\n");
else printf("%d\n", min);
return 0;
}