POJ3061 Subsequence

Posted zcdhj

tags:

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

POJ

由于是英文题面的缘故,讲下题意。

大概就是给一个有\(N\)个正整数的序列,求出最小的子串长度,其和大于\(S\)

去学了下所谓的"尺取法"

先维护一下左右两个指针,当当前总和小于\(S\)时,需要推进右指针来使总和变大,当总和大于等于\(S\)的时候,需要推进左指针来使得答案满足要求/答案更优。

#include <iostream>
#include <cstdio>

typedef long long ll;

const int inf = 0x3f3f3f3f;
const int max_n = 1e5 + 5;

int T, N, M, L, R, Ans;
int A[max_n];

inline int read()
{
    register int x = 0;
    register char ch = getchar();
    while(!isdigit(ch))
        ch = getchar();
    while(isdigit(ch))
    {
        x = (x << 1) + (x << 3) + ch - ‘0‘;
        ch = getchar();
    }
    return x;
}

int main()
{
    int l, r;
    ll sum;
    T = read();
    while(T--)
    {
        N = read(), M = read();
        Ans = inf, l = r = 1, sum = 0;
        for(int i = 1; i <= N; ++i)
            A[i] = read();
        while(1)
        {
            while(r <= N && sum < M) sum += A[r++];
            if(sum < M) break;
            Ans = std::min(Ans, r - l);
            sum -= A[l++];
        }
        printf("%d\n", (Ans == inf) ? 0 : Ans); 
    }
    return 0;
}

以上是关于POJ3061 Subsequence的主要内容,如果未能解决你的问题,请参考以下文章

Subsequence(POJ 3061)

Subsequence POJ - 3061

POJ 3061 Subsequence 尺取

poj 3061--Subsequence

POJ3061 Subsequence

POJ 3061 Subsequence