站外题2
  • 板块灌水区
  • 楼主lucy2012
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/4/3 17:59
  • 上次更新2024/4/3 21:08:00
查看原帖
站外题2
1252442
lucy2012楼主2024/4/3 17:59

题目描述 时间:1s 空间:256M 题目描述: 给定一个含有 � n 个整数的数组和一个整数 � s ,找出该数组中满足其和 ≥ � ≥s 的长度最小的连续子数组。

如果不存在符合条件的连续子数组,输出 0 0。

输入格式: 第一行包含一个整数 � T,表示测试数据组数。

对于每组测试数据,

第一行包含两个整数 � n, � s。

接下来包含 � n 个整数 � � a i ​

输出格式: 对于每组测试数据,输出一个整数表示答案。

样例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

保证

对于样例1的第一组测试数据:子数组下标是 [ 6 , 7 ],所以答案为 2。

#include<bits/stdc++.h>
using namespace std;
long long t,n,s;
int main(){
	cin>>t;
	for(int i=1;i<=t;i++){
		long long s,a[400000],l=1,r=1,minn=100000010;
		a[0]=0;
		cin>>n>>s;
		for(int j=1;j<=n;i++){
			cin>>s;
			a[j]=a[j-1]+s;
		}
	    while(l<=n){
	    	if(a[r]-a[l-1]>=s){
	    		if(r-l+1<minn)
	    		    minn=r-l+1;
	    		if(l<r) l++;
	    		else r++;
			}else r++;
		}
		if(minn==1000000100) cout<<0;
	    else cout<<minn;
	}
	return 0;
}
2024/4/3 17:59
加载中...