2 10 15 5 1 3 5 10 7 4 9 2 8 5 11 1 2 3 4 5Sample Output
2 3
先取前x个数(r++),直到大于S,减去该区间最前面的一个数(收缩 l++),再次判断是否大于S,重复操作,直至t==n或 取得的区间无法大于S 停止。
代码:
#include <iostream>
#include <stdio.h>
#include <algorithm>
using namespace std;
int num[100002];
int main(){
int t;
int n,s;
int INF=999999;
int l,r,sum,mi;
cin>>t;
while(t--){
cin>>n>>s;
mi=INF;
l=0;r=0;sum=0;
for(int j=0;j<n;j++)
cin>>num[j];
while(true){
while(sum<s&&r<n)
sum+=num[r++];
if(sum<s)
break;
sum-=num[l];
mi=min(mi,r-l);
l++;
}
if(mi==INF)
cout<<0<<endl;
else
cout<<mi<<endl;
}
return 0;
}
556



被折叠的 条评论
为什么被折叠?



