uva 1121 Subsequence
https://vjudge.net/problem/UVA-1121
题意:
给出一个正整数数列a,要求找出最短的连续的一个序列使得这个序列的所有数字之和大于等于S。
思路:
第一是由于序列都是正整数,所以他们的前缀和是递增的,就可以用二分搜索,但是我的二分是二分的个数,这个具体看代码。复杂度O(NlogN)。
#include <stdio.h>
#include <string.h> int a[];
int s;
int n; bool meet(int k)
{
int sum = ; for (int i = ;i < k;i++)
sum += a[i]; if (sum >= s) return ; for (int i = k;i < n;i++)
{
sum -= a[i-k];
sum += a[i]; if (sum >= s) return ;
} return ;
} int main()
{
while (scanf("%d%d",&n,&s) != EOF)
{
for (int i = ;i < n;i++)
scanf("%d",&a[i]); int l = ,r = n; if (!meet(n))
{
printf("0\n"); continue;
} while (l < r)
{
int mid = (l + r) >> ; if (meet(mid)) r = mid;
else l = mid + ;
} while (r - > && meet(r-)) r--; printf("%d\n",r);
} return ;
}
第二个思路就是用尺取法,可以到达O(N)的复杂度。
具体就是设置一个起始位置start,然后end指针从第一个元素开始遍历,当sum[end] - sum[start] < s的时候,把end指针右移,当满足sum[end] - sum[start] >= s的时候,就把start指针向右移,然后更新ans的值。
复杂度的分析:由于start是一直递增的,然后它最多递增n次,所以复杂度是O(N)。
代码:
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std; int a[],b[]; int main()
{
int n,s; while (scanf("%d%d",&n,&s) != EOF)
{
for (int i = ;i <= n;i++) scanf("%d",&a[i]); b[] = ; for (int i = ;i <= n;i++) b[i] = b[i-] + a[i]; int start = ; int ans = n + ; for (int i = ;i <= n;i++)
{
if (b[i] - b[start] < s) continue; while (b[i] - b[start] >= s) start++; ans = min(ans,i - start + );
} if (ans == n + ) printf("%d\n",);
else printf("%d\n",ans);
} return ;
}
uva 1121 Subsequence的更多相关文章
- UVA之1121 - Subsequence
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/SunnyYoona/article/details/25840365 [题目] A sequence ...
- UVA 11404 Palindromic Subsequence[DP LCS 打印]
UVA - 11404 Palindromic Subsequence 题意:一个字符串,删去0个或多个字符,输出字典序最小且最长的回文字符串 不要求路径区间DP都可以做 然而要字典序最小 倒过来求L ...
- UVA 11404 五 Palindromic Subsequence
Palindromic Subsequence Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu ...
- LPS UVA 11404 Palindromic Subsequence
题目传送门 题意:求LPS (Longest Palidromic Subsequence) 最长回文子序列.和回文串不同,子序列是可以不连续的. 分析:1. 推荐->还有一种写法是用了LCS的 ...
- UVA 11404 Palindromic Subsequence
Palindromic Subsequence Time Limit: 3000ms Memory Limit: 131072KB This problem will be judged on UVA ...
- UVa 10405 & POJ 1458 Longest Common Subsequence
求最长公共子序列LCS,用动态规划求解. UVa的字符串可能含有空格,开始用scanf("%s", s);就WA了一次...那就用gets吧,怪不得要一行放一个字符串呢. (本来想 ...
- 【UVA 11404】Palindromic Subsequence
UVA 11404 我用了最暴力的做法:考虑\(dp[i][j]\)表示\(S[i..j]\)的最长回文子序列的长度以及字典序最小的那个. 然后转移的时候如下处理:首先\(dp[i][j]\)要取\( ...
- UVA 10405 Longest Common Subsequence
题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=16&p ...
- UVA 10405 Longest Common Subsequence (dp + LCS)
Problem C: Longest Common Subsequence Sequence 1: Sequence 2: Given two sequences of characters, pri ...
随机推荐
- [js高手之路]node js系列课程-创建简易web服务器与文件读写
web服务器至少有以下几个特点: 1.24小时不停止的工作,也就是说这个进程要常驻在内存中 2.24小时在某一端口监听,如: http://localhost:8080, www服务器默认端口80 3 ...
- 互联网世界中的C语言——我的golang学习笔记:1(基础语法快速过)
前言 学习任何知识都会有一个学习背景 最近,我们团队乃至我司整个云服务,上go的呼声越来越高!新服务已经开始用go开发,部分现有Java版的服务重构为go也只是时间问题而已,故相关技术积累势在必行!在 ...
- css常用文本属性
[CSS常用文本属性] 1. 字体.字号类: ① font-weight: 字体粗细. bold-加粗.normal-正常.lighter-细体 也可以使用100-900数值,400表示normal, ...
- h5新增html标签语义
H5新增常用标签<body> <header>...</header> <nav>...</nav> <article> < ...
- 微信iOS收款到账语音提醒开发总结
本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:https://mp.weixin.qq.com/s/yYCaPMxHGT9LyRyAPewVWQ 作者:l ...
- 7_SQL Server通过代码删除数据
--通过代码方式删除数据select *from Employee --第一种删除方式,数据没了,表还在,id接着删除前的id继续加1delete from Employee where EmpId ...
- 九度OJ 1010 A +B
#include <iostream> #include <string> #include <sstream> using namespace std; int ...
- java记事本1.2版
功能:实现了新建,打开,保存,退出,复制,剪切,粘贴等功能 效果图:
- 数据库Mysql的安装及操作---数据引擎
一.1.什么是数据 描述事物的符号记录称为数据. 2.什么是数据库 存放数据的仓库,只不过这个仓库在计算机上存储设备上. 二.Mysql的介绍 ...
- lintcode.22 平面列表
平面列表 描述 笔记 数据 评测 给定一个列表,该列表中的每个要素要么是个列表,要么是整数.将其变成一个只包含整数的简单列表. 注意事项 如果给定的列表中的要素本身也是一个列表,那么它也可以包含 ...