uva 1121 - Subsequence

简介: 点击打开链接uva 1121 思路:二分查找 分析: 1 题目要求找到一个最短的子序列长度并且这个子序列的和大于等于给定的s 2 如果按照常规的做法枚举起点和终点的话肯定是会超时的。

点击打开链接uva 1121

思路:二分查找
分析:
1 题目要求找到一个最短的子序列长度并且这个子序列的和大于等于给定的s
2 如果按照常规的做法枚举起点和终点的话肯定是会超时的。那么这里我们注意到给定的n个数都是正数,那么我们可以求出每一个数的前缀和
3 利用前缀和是递增的性质,那么我们在结合二分查找使得时间复杂度降到o(nlogn),那么这个是可以接受的。

代码:

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

const int MAXN = 100010;
int num[MAXN] , sum[MAXN];
int n , s;

int search(int i){
    int left , right , mid;
    left = 0 , right = i;
    while(left <= right){
        int mid = (left+right)>>1;
        if(sum[i]-sum[mid] >= s)
           left = mid+1;
        else
           right = mid-1;
    }
    return i-right; 
}

int solve(){
    int ans = MAXN;
    for(int i = 1 ; i <= n ; i++){
        if(sum[i] >= s)
           ans = min(ans , search(i));
    }
    return ans == MAXN ? 0 : ans;
}

int main(){
    while(scanf("%d%d" , &n , &s) != EOF){
         memset(sum , 0 , sizeof(sum)); 
         for(int i = 1 ; i <= n ; i++){
             scanf("%d" , &num[i]); 
             sum[i] = num[i] + sum[i-1]; 
         }
         printf("%d\n" , solve()); 
    }
    return 0;
}




目录
相关文章
|
8月前
|
算法
POJ3061 Subsequence
POJ3061 Subsequence
LeetCode 376. Wiggle Subsequence
如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列。第一个差(如果存在的话)可能是正数或负数。少于两个元素的序列也是摆动序列。
69 0
LeetCode 376. Wiggle Subsequence
|
索引
LeetCode 392. Is Subsequence
给定字符串 s 和 t ,判断 s 是否为 t 的子序列。 你可以认为 s 和 t 中仅包含英文小写字母。字符串 t 可能会很长(长度 ~= 500,000),而 s 是个短字符串(长度 <=100)。 字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。
66 0
LeetCode 392. Is Subsequence
HDU 4632 Palindrome subsequence(动态规划)
HDU 4632 Palindrome subsequence(动态规划)
55 0
HDU 4632 Palindrome subsequence(动态规划)
|
机器学习/深度学习
Uva - 12050 Palindrome Numbers【数论】
题目链接:uva 12050 - Palindrome Numbers   题意:求第n个回文串 思路:首先可以知道的是长度为k的回文串个数有9*10^(k-1),那么依次计算,得出n是长度为多少的串,然后就得到是长度为多少的第几个的回文串了,有个细节注意的是, n计算完后要-1! 下面给出A...
817 0
[UVa OJ] Longest Common Subsequence
This is the classic LCS problem. Since it only requires you to print the maximum length, the code can be optimized to use only O(m) space (see here).
756 0
|
人工智能 BI 算法