码迷,mamicode.com
首页 > 其他好文 > 详细

POJ3061 Subsequence

时间:2018-02-19 22:57:06      阅读:202      评论:0      收藏:0      [点我收藏+]

标签:大于   poj3061   log   clu   logs   就是   register   blog   cpp   

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

标签:大于   poj3061   log   clu   logs   就是   register   blog   cpp   

原文地址:https://www.cnblogs.com/zcdhj/p/8454544.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!