2019 GDUT 新生专题I选集 A题(POJ-3061)

A-尺取

链接
来源:POJ-3061

题目描述
给一串序列,求其中一段满足各元素的总和大于等于数S的连续子序列的最短长度。

题目分析
因为 专题名字是尺取 要求满足条件的连续子序列的最短长度,由缩短长度的过程可联想到使用尺取法。
注意是大于等于而不是只有等于。
注意边界的处理以免答案差1。

代码

#include <stdio.h>
int main()
{
	int ca;
	scanf("%d",&ca);
	while(ca--){
		int n,a[100000],aim,i,ans=0,left=0,sum=0;
		scanf("%d%d",&n,&aim);
		for(i=0;i<n;i++)
			scanf("%d",a+i);
		for(i=0;i<n;i++){
			sum+=a[i];
			while(sum>=aim){
				sum-=a[left++];
				if(sum<aim)
					ans=ans?(ans<(i-left+2)?ans:(i-left+2)):(i-left+2);
					//减left的时候减多了1
			}
		}
		printf("%d\n",ans);
	}
}
发布了24 篇原创文章 · 获赞 1 · 访问量 688

猜你喜欢

转载自blog.csdn.net/palax0/article/details/103959819