编程语言
首页 > 编程语言> > 尺取算法 入门+模板+例题

尺取算法 入门+模板+例题

作者:互联网

尺取算法 入门+模板+例题

博客推荐

尺取法原理及模板

https://blog.csdn.net/doubleguy/article/details/81265327

一些入门例题

https://blog.csdn.net/lxt_Lucia/article/details/81091597

模板

这里根据题目POJ 3061来具体实现。

题意是说给你一个有数字组成的序列,找出最短的子串(注意:子串是连续的,子序列可以不连续),使得这个子串的和大于等于S,求子串的长度。

思路:使用尺取法来解决。

#include<cmath>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<string>
#include<stack>
#include<queue>
#include<map>
typedef long long ll;
using namespace std;
const double esp=1e-6;
const int inf=0x3f3f3f3f;
const int MAXN=1E5+7;
int num[MAXN], n, s;
int main()
{
    int t=0;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d%d", &n, &s);
        for(int i=0; i<n; i++)
            scanf("%d", &num[i]);
        int ans=inf, lt=0, rt=0, sum=0;
        while(1)
        {
            while(sum < s && rt < n) 
                sum+=num[rt++];
            if(sum<s) break; //根据上边的循环的条件,如果sum<s的话说明已经右边界到头了,但是子序列的和还是小于S,所以就需要跳出循环了。
            ans=min(ans, rt-lt);
            sum-=num[lt++];
        }
        if(ans==inf) ans=0;
        printf("%d\n", ans);
    }

    return 0;
}

标签:子串,例题,const,int,尺取,include,模板
来源: https://www.cnblogs.com/alking1001/p/12258813.html