uva 1121 - Subsequence
来源:互联网 发布:下载证券交易软件 编辑:程序博客网 时间:2024/04/28 00:38
点击打开链接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;}
- Uva-1121-Subsequence
- uva 1121 - Subsequence
- uva 1121 - Subsequence(TwoPointer)
- Uva 1121Subsequence
- UVA之1121 - Subsequence
- UVA 1121 Subsequence
- UVA - 1121 Subsequence
- UVa 1121 - Subsequence
- UVA-1121-Subsequence-TwoPointer
- uva 1121 - Subsequence(子序列)
- LA 2678 UVA 1121 - Subsequence
- UVA 1121 Subsequence(复杂度优化)
- UVa 1121 Subsequence 解题报告(思维)
- UVa 1121 - Subsequence(尺取法)
- UVA 10069 Distinct Subsequence
- UVA 11654Arithmetic Subsequence
- UVA live 2678 - Subsequence
- UVA 11404 Palindromic Subsequence
- (6)外观模式
- EEPROM的写入操作解析
- 如何利用JLINK烧写U-boot到NAND Flash中
- python编辑器对比和推荐
- 差分约束
- uva 1121 - Subsequence
- 树状数组
- 太阳能电池板日发电量简易计算方法
- CSS3特效之渐变:linear-gradient
- java中super关键字的使用
- 设置默认韩语输入法
- Lucene 入门示例
- Struts2教程1:第一个Struts2程序
- 如何终止线程的运行(C/C++)