poj3061
两个指针,l,r
取sum[i]-sum[l-1] >=s 时记录长度
不断l++ ;开始循环,直至边界。
#include <iostream>
#include <cstring>
#include <cstdio>
#include <queue>
#include <stack>
#include <cmath>
#include <map>
#include <algorithm>
#include <vector>
using namespace std;
#define ll long long
const int N = 100009;
ll n,s;
ll arr[N],sum[N];
void solve(){
int t;
cin>>t;
while(t--){
memset(arr,0,sizeof(arr));
memset(sum,0,sizeof(sum));
cin>>n>>s;
sum[0]=0;
for(int i=1;i<=n;i++){
cin>>arr[i];
sum[i]=arr[i]+sum[i-1];
}
int l=1,r=1,ans=100000+7;
while(1){
while(sum[r]-sum[l-1]<s&&r<n){
r++;
}
if(sum[r]-sum[l-1]<s){break; }
ans=min(ans,r-l+1);
l++;
}
if(ans>n) puts("0");
else cout<<ans<<endl;
}
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
solve();
return 0;
}