二分查找尽量少的满足条件的序列。。。
ACcode:
#include<stdio.h>
#include<iostream>
const int nsize=111111;
int sum[nsize],s;
int Fin(int k)
{
int l=1,r=k;
while (l<r)
{
int m=(l+r)>>1;
int t=sum[k]-sum[m-1];
if (t==s) return m;
else if (t>s)
{
if ((sum[k]-sum[m])<s) return m;
else l=m+1;
}
else r=m-1;
}
return l;
}
int Min(int a1,int a2)
{
return a1<a2?a1:a2;
}
int main()
{
int i,k,n,len;
while (scanf("%d %d",&n,&s)!=EOF)
{
sum[0]=0,len=n+1;
for (i=1;i<=n;i++)
{
scanf("%d",&k);
sum[i]=sum[i-1]+k;
}
for (i=1;i<=n;i++)
{
if (sum[i]>=s)
{
int L=Fin(i);
k=i-L+1;
len=Min(k,len);
}
}
printf("%d\n",len>n?0:len);
}
return 0;
}