这是代码
#include<bits/stdc++.h>
using namespace std;
int main(){
long long a[300010],t,s,n;
cin>>t;
while(t--){
long long sum=0;
int minn=1e9;
cin>>n>>s;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1,j=1;i<=n;i++){
while(sum<s&&j<=n){
sum+=a[j];
j++;
}
if(sum>=s) minn=min(minn,j-i);
sum-=a[i];
}
if(minn==1e9)cout<<"0";
else cout<<minn;
}
return 0;
}
题目:
G. 长度最小的子数组
Problem ID: 8091
Contest ID: 5874
必做题
Wrong Answer 60
时间:1s 空间:256M
题目描述:
给定一个含有 n 个整数的数组和一个整数 s ,找出该数组中满足其和 ≥s 的长度最小的连续子数组。
如果不存在符合条件的连续子数组,输出 0。
输入格式:
第一行包含一个整数 T,表示测试数据组数。
对于每组测试数据,
第一行包含两个整数 n, s。
接下来包含 n 个整数 ai
输出格式:
对于每组测试数据,输出一个整数表示答案。
样例1输入:
3
8 7
2 3 1 2 0 4 3 0
8 100
2 3 1 2 0 4 3 0
3 0
1 1 1
样例1输出:
2
0
1
约定与提示:
对于100%的数据,
1≤T≤3⋅105,
1≤n≤3⋅105,
0≤s≤1018,
0≤ai≤109
保证 ∑n≤3⋅105
对于样例1的第一组测试数据:子数组下标是[6,7],所以答案为 2。