poj3061(尺取法)

Posted shutdown113

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了poj3061(尺取法)相关的知识,希望对你有一定的参考价值。

Subsequence

题意:

  给出一个序列,要求找出一个长度最短的连续子区间,满足区间上所有数之和大于等于S,输出这个最短长度。

分析:

  枚举每个点为左端点,用尺取法找到其右端点,取n次结果中的最小值就好了。

代码:

技术分享图片
#include <stack>
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>

using namespace std;
#define ll long long
#define ull unsigned long long
#define cls(x) memset(x,0,sizeof(x))
#define clslow(x) memset(x,-1,sizeof(x))

const int maxn=1e5+100;

int n,T,S;

int a[maxn];

int main()
{
//    freopen("in.txt","r",stdin);
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d%d",&n,&S);
        for(int i=1;i<=n;i++){
            scanf("%d",&a[i]);
        }

        int s=1,e=1;
        int ans=n+1,sum=0;
        while(true)
        {
            while(e<=n&&sum<S)  sum+=a[e++];
            if(sum<S)   break;
            ans=min(ans,e-s);
            sum-=a[s++];
        }
        if(ans==n+1)    ans=0;
        printf("%d
",ans);
    }
    return 0;
}
View Code

以上是关于poj3061(尺取法)的主要内容,如果未能解决你的问题,请参考以下文章

poj3061(尺取法)

POJ 3061 Subsequence 尺取法

POJ 3061 Subsequence (二分||尺取法)

poj3061 Subsequence(尺取法)

尺取法POJ3061 & POJ3320

题解报告:poj 3061 Subsequence(二分前缀法or尺取法)