http://poj.org/problem?id=3061
//设置以下的算法:
//1、给定起点s=e=1;
//2、e一直往后走,直到sum(s,t)>S 更新res
//3、减去第一个数,然后回到步骤2
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int maxn=100010;
int num[maxn];
int n,S,t;
//设置以下的算法:
//1、给定起点s=e=1;
//2、e一直往后走,直到sum(s,t)>S 更新res
//3、减去第一个数,然后回到步骤2
int main()
{
// freopen("in.txt","r",stdin);
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&S);
for(int i=1; i<=n; i++)
scanf("%d",&num[i]);
int res = n+1;
int sum = num[1];
int s = 1;
int e = 1;
while(1)
{
while( e<=n && sum < S)
{
e++;
sum += num[e];
}
if (sum < S) break;
// for(int i = s;i<=e;i++)
// printf("%d ",num[i]);
// printf("\n");
res = min(res,e-s+1);
sum -= num[s];
s++;
}
if (res == n+1) res = 0;
printf("%d\n",res);
}
return 0;
}