Description
给你一个数字N,S
再给你N个正整数,希望你找一段连续的数字之和Sum
满足条件:
sum大于等于S并且区间长度尽可能的小
Format
Input
第一行给出T,代表数据数组
对于每组数据,第一行给出N,S
接下来给出N个正整数,其值<=1e4
10<N<1e5
S<=1e8
Output
每行输出一个结果,无解输出0
Samples
输入数据 1
2
10 15
5 1 3 5 10 7 4 9 2 8
5 11
1 2 3 4 5
Copy
输出数据 1
2
3
#include<bits/stdc++.h>
using namespace std;
int n,m,v[2010],k[1000005],s;
int main(){
int a,b,c=1e9,r=0,t=0,l=1;
cin>>n;
queue<int> q;
for(int i=1;i<=n;i++){
cin>>s>>m;
r=1;
l=0;
t=0;
c=1e9;
for(int i=1;i<=s;i++){
cin>>k[i];
if(t+k[i]<m){
t+=k[i];
l++;
}
else if(t+k[i]==m){
t+=k[i];
l++;
c=min(c,l-r+1);
}
else if(t+k[i]>m){
t+=k[i];
l++;
c=min(c,l-r+1);
while(t-k[r]>=m){
t-=k[r];
r++;
c=min(c,l-r+1);
}
}
}
if(c!=1e9) cout<<c<<endl;
else cout<<"0"<<endl;
// q.push(k[i]);
// r++;
// if(!v[k[i]]){
// t++;
// }
// v[k[i]]++;
// while(v[q.front()]>1 && l<r){
// l++;
// v[q.front()]--;
// q.pop();
// }
// if(t==m){
// if(r-l+1<c){
// c=r-l+1;
// a=l;
// b=r;
// }
// }
}
// cout<<a<<" "<<b;
return 0;
}