//Subsequence //尺取法 #include <iostream> #include <cstring> #include <cstdio> using namespace std; int a[1000010];//定义输入数组 int main() { int t; cin>>t; while(t--) { int n,i,r,j,flag=0,minn; int flag1=0;//标记第一次遇到符合条件的序列 memset(a,0,sizeof(a)); cin>>n>>r; for(i=1;i<=n;i++) { cin>>a[i];if(i>1) a[i]+=a[i-1];}//一边输入,一边转化为前缀和 int sum=0,p=0; for(i=1;i<=n;i++)//后指针 { for(j=p+1;j<i;j++)//前指针 { if(a[i]-a[j]>=r)//如果找到符合条件的序列 { if(!flag) {flag=1;minn=i-j;}//第一次找到,先给最小长度minn赋值 else if(i-j<minn) minn=i-j;//非第一次找到,更新最小长度minn p=j;//标记前指针j的位置,下次直接从j后面的一个位置搜索 } else break;//若不符合直接退出,因为再往后移和只会变小 } } if(!flag) cout<<"0"<<endl;//若找不到符合条件的,输出0 else cout<<minn<<endl;//输出最小长度 } }