UVALive - 2678 Subsequence (尺取法)

原创 2016年08月31日 15:27:10

A sequence of N positive integers ( 10 < N < 100 000), each of them less than or equal 10000, and
a positive integer
S
(
S<
100 000 000) are given. Write a program to nd the minimal length of the
subsequence of consecutive elements of the sequence, the sum of which is greater than or equal to
S
.
Input
Many test cases will be given. For each test case the program has to read the numbers
N
and
S
,
separated by an interval, from the rst line. The numbers of the sequence are given in the second line
of the test case, separated by intervals. The input will nish with the end of le.
Output
For each the case the program has to print the result on separate line of the output le.
SampleInput
10 15
5 1 3 5 10 7 4 9 2 8
5 11
1 2 3 4 5
SampleOutput
2
3

题解:
这道题就是一个典型的尺取法。
好坑啊,如果序列全部加起来都没有s大,应该输出0。

#include<cstdio>
#include<cmath>
#include<iostream>
using namespace std;
#include<algorithm>

const int maxn=1e5+5;
long long a[maxn];

int main(){
    int n;
    long long s;
    while(~scanf("%d%lld",&n,&s)){
        for(int i=1;i<=n;++i){
            scanf("%lld",&a[i]);
        }
        int slow=1,fast=1,ans=n;
        long long sum=0;
        while(true){
            while(fast<=n && sum<s){
                sum+=a[fast];
                ++fast;
            }
            if(sum>=s)
                ans=min(ans,fast-slow);
            sum-=a[slow];
            ++slow;
            if(slow>n)break;
        }
        printf("%d\n",ans==n?0:ans);
    }
    return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

uva1121 Subsequence

前缀和+扫描
  • sdfzyhx
  • sdfzyhx
  • 2016年11月12日 20:54
  • 72

UVALIVE 2678

题目链接:UVALIVE 2678解题思路: 这题一共有两种做法,一种是二分法,时间复杂度为O( n*log(n) );一种是直接遍历,时间复杂度为O( n )。 二分: 维护一个sum数组,保...
  • fuyukai
  • fuyukai
  • 2016年03月03日 10:13
  • 323

uvalive 2678

题意:给出一个长为n的序列,和目标值s,找出最短序列和刚好大于等于目标值,输出序列长度。 题解:枚举起点终点时间复杂度高,可以枚举终点,f[i]表示序列第1个到第i个数字的和,因为f数组递增,可以用...

uvalive2678(子序列)

题意: 给出一个序列,长度为n然后问最小的连续子序列,使和小于s; 思路: 直接两层循环肯定是要超时的; 所以我们枚举终点,然后找到终点最近的一个满足条件的位置; #incl...

UVALive - 2678 Subsequence 推理

题目大意:有n个正整数组成一个序列,给定整数S,求长度最短的连续序列,使它们的和大于等于S 解题思路:用一个数组sum记录前n个数的和,这样就可以得到任何一段数字的连续和了,在for一遍,用一个数记...

UVALive2678 UVA1121 Subsequence【前缀和+二分搜索+尺取法】

Sequence A sequence of N positive integers (10 < N < 100 000), each of them less than or equal 10000...

LA 2678 Subsequence(尺取法)

Subsequence Time Limit: 3000ms Memory Limit: 131072KB This problem will be judged on UVAL...

la2678(前缀和,二分/尺取法)

/* translation: 有n个正整数组成一个序列。给定整数s,求长度最短的连续序列,使得他们的和大于等于s solution: 前缀和,尺取法/二分 这道题可用尺取法或...

POJ 3061 Subsequence 二分或者尺取法

给定长度为n的整列整数a[0],a[1],……a[n-1],以及整数S,求出总和不小于S的连续子序列的长度的最小值。...

POJ 3061 Subsequence(二分/尺取法)

题目链接: http://poj.org/problem?id=3061 解题思路: 题目大意: 给定长度为n的整列整数a[0],a[1],……a[n-1],以及整数S,求出总和不小于S的连续子序列...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:UVALive - 2678 Subsequence (尺取法)
举报原因:
原因补充:

(最多只允许输入30个字)