尺取法的应用
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn = 100000 + 7;
const int INF = ~0U >> 1;
int n, S, ans;
int a[maxn];
int main() {
while(scanf("%d%d", &n, &S) != EOF) {
memset(a, 0, sizeof(a));
for(int i = 0; i < n; ++i)
scanf("%d", &a[i]);
int left = 0, right = 0;
ans = INF;
int sum = a[0];
for(int i = 0, j = 0; i < n || j < n; ) {
if(sum < S) {
if(j < n) {
++j;
sum += a[j];
} else {
++i;
sum -= a[i];
if(i > j) j = i;
}
} else {
ans = min(ans, j - i + 1);
//printf("%d %d+++\n", i, j);
sum -= a[i];
++i;
// printf("%d***\n", sum);
if(i > j) j = i;
}
}
if(ans == INF) printf("0\n");
else printf("%d\n", ans);
}
return 0;
}