尺取法 POJ 3601 Subsequence
题目传送门
1 /* 2 题意:求连续子序列的和不小于s的长度的最小值 3 尺取法:对数组保存一组下标(起点,终点),使用两端点得到答案 4 1. 记录前i项的总和,求[i, p)长度的最小值,用二分找到sum[p] - s[i] >= s的p 5 2. 除了O (nlogn)的方法,还可以在O (n)实现,[i, j)的区间求和,移动两端点,更新最小值,真的像尺取虫在爬:) 6 */ 7 #include <cstdio> 8 #include <algorithm> 9 #include <cstring> 10 #include <cmath> 11 using namespace std; 12 13 typedef long long ll; 14 const int MAXN = 1e5 + 10; 15 const int INF = 0x3f3f3f3f; 16 int a[MAXN]; 17 ll sum[MAXN]; 18 19 int main(void) //POJ 3601 Subsequence 20 { 21 int t; scanf ("%d", &t); 22 while (t--) 23 { 24 memset (sum, 0, sizeof (sum)); 25 int n, s; 26 scanf ("%d%d", &n, &s); 27 for (int i=1; i<=n; ++i) {scanf ("%d", &a[i]); sum[i] = sum[i-1] + a[i];} 28 29 if (sum[n] < s) {puts ("0"); continue;} 30 31 int ans = n; 32 for (int i=1; sum[i]+s<=sum[n]; ++i) 33 { 34 int p = lower_bound (sum+i, sum+1+n, sum[i] + s) - sum; 35 ans = min (ans, p - i); 36 } 37 38 printf ("%d\n", ans); 39 } 40 41 return 0; 42 } 43 44 45 /* 46 2 47 10 15 48 5 1 3 5 10 7 4 9 2 8 49 5 11 50 1 2 3 4 5 51 */
1 #include <cstdio> 2 #include <algorithm> 3 #include <cstring> 4 #include <cmath> 5 using namespace std; 6 7 typedef long long ll; 8 const int MAXN = 1e5 + 10; 9 const int INF = 0x3f3f3f3f; 10 int a[MAXN]; 11 12 int main(void) //POJ 3601 Subsequence 13 { 14 int t; scanf ("%d", &t); 15 while (t--) 16 { 17 int n, s; 18 scanf ("%d%d", &n, &s); 19 for (int i=1; i<=n; ++i) scanf ("%d", &a[i]); 20 21 int ans = n + 1; int i = 1, j = 1; ll sum = 0; 22 while (1) 23 { 24 while (j <= n && sum < s) sum += a[j++]; 25 if (sum < s) break; 26 ans = min (ans, j - i); 27 sum -= a[i++]; 28 } 29 30 if (ans == n + 1) puts ("0"); 31 else printf ("%d\n", ans); 32 } 33 34 return 0; 35 } 36 37 38 /* 39 2 40 10 15 41 5 1 3 5 10 7 4 9 2 8 42 5 11 43 1 2 3 4 5 44 */
O (n)
转载于:https://www.cnblogs.com/Running-Time/p/4550206.html
尺取法 POJ 3601 Subsequence相关推荐
- 尺取法 POJ 3320 Jessica's Reading Problem
题目传送门 1 /* 2 尺取法:先求出不同知识点的总个数tot,然后以获得知识点的个数作为界限, 更新最小值 3 */ 4 #include <cstdio> 5 #include &l ...
- (尺取法模板题) QLU_ACM 2021 专题训练(一) D - Subsequence 题解
D - Subsequence POJ - 3061 <----------- 原题在这 题目大意 给定数组a,求其符合∑a[i] > S 的最短子数列. 尺取法解析 蒟蒻这道题WA了8次 ...
- POJ 3320 尺取法,Hash,map标记
1.POJ 3320 2.链接:http://poj.org/problem?id=3320 3.总结:尺取法,Hash,map标记 看书复习,p页书,一页有一个知识点,连续看求最少多少页看完所有知识 ...
- POJ 3061 (二分+前缀和or尺取法)
题目链接: http://poj.org/problem?id=3061 题目大意:找到最短的序列长度,使得序列元素和大于S. 解题思路: 两种思路. 一种是二分+前缀和.复杂度O(nlogn).有点 ...
- Bound Found POJ - 2566(尺取法+前缀和创造区间变化趋势)
题意: 给定一个数组和一个值t,求一个子区间使得其和的绝对值与t的差值最小,如果存在多个,任意解都可行. 题目: Signals of most probably extra-terrestrial ...
- NUC1742 Subsequence【前缀和+二分搜索+尺取法】
Subsequence 时间限制: 1000ms 内存限制: 65536KB 通过次数: 1总提交次数: 1 问题描述 A sequence of N positive integers (10 &l ...
- poj 3061(尺取法)
从长为n的全为正数的数组a中,找到个数最少的连续子数列使其和>=m example: n=10,m=15,a[10]={5 1 3 5 10 7 4 9 2 8},结果为2 解题思路:昨天做了一 ...
- 【常用技巧精选】尺取法
整理的算法模板合集: ACM模板 目录 1.反向扫描 1 找指定和的整数对 A.UVA1121 Subsequence B.POJ 3320 Jessica's Reading Problem C.l ...
- poj3061尺取法/前缀和 二分(java)
今天遇到这题因为以前没见到过,当时就是想着应该有着一个很简单的方法可以过但是奈何就是没思路.后来看了别人思路写了下来.学习了尺取法 poj3061 题目介绍: Description A sequen ...
最新文章
- virsh 常用操作
- Cannot set property 'render' of undefined
- 大数据技术基础_【基础】大数据技术栈介绍
- 控制游戏中物体的移动速度
- 关于Linux路由表的route命令
- php wdatepicker,WdatePicker时间控件的使用
- (转载)委托与函数指针辨析
- Linux学习笔记四:OTG方式为itop4412烧写安卓系统
- MapReduce 学习4 ---- 自定义分区、自定义排序、自定义组分
- C# Excel 读写数据
- SQLserver数据库还原后显示正在还原
- 聊天机器人的“高情商”炼成术
- Axure 8.0破解版下载
- 通俗易懂的虚短、虚断的使用条件?
- 2000款学校教师课件培训PPT模板免费下载网址
- jy在线制图系统免费源码丨一秒生成广告横图海报图
- TFHE同态库的Torus32
- 华硕开机自动进入BIOS解决办法
- 根据图片快速设置IDEA启动的Banner效果
- 图论问题建模讨论汇总
热门文章
- SAP MM '独立/集中'等于1的MTS物料MRP运行后合并需求触发PR
- 大厂AI面试官一语中的:一场面试暴露了你的机器学习水平
- 科普丨浅谈人工神经网络跌宕起伏七十年
- 深度丨AI挑战人类情感!机器人写诗出书背后透露了什么?
- python安装Pyro报错:SyntaxError: Missing parentheses in call to ‘exec‘
- 一些常见的名词解释(持续更新中)
- 世界互联网大会上发布的《中国互联网发展报告2020》显示——中国人工智能专利申请数跃居世界第一...
- 15℃!人类首次实现高压下室温超导,研究登上Nature封面
- 2020年五大云计算预测
- 2018微信年度数据报告:00后最爱表情捂脸哭 80后呲牙笑