尺取法 POJ 3601 Subsequence
- /*
- 题意:求连续子序列的和不小于s的长度的最小值
- 尺取法:对数组保存一组下标(起点,终点),使用两端点得到答案
- 1. 记录前i项的总和,求[i, p)长度的最小值,用二分找到sum[p] - s[i] >= s的p
- 2. 除了O (nlogn)的方法,还可以在O (n)实现,[i, j)的区间求和,移动两端点,更新最小值,真的像尺取虫在爬:)
- */
- #include <cstdio>
- #include <algorithm>
- #include <cstring>
- #include <cmath>
- using namespace std;
- typedef long long ll;
- const int MAXN = 1e5 + ;
- const int INF = 0x3f3f3f3f;
- int a[MAXN];
- ll sum[MAXN];
- int main(void) //POJ 3601 Subsequence
- {
- int t; scanf ("%d", &t);
- while (t--)
- {
- memset (sum, , sizeof (sum));
- int n, s;
- scanf ("%d%d", &n, &s);
- for (int i=; i<=n; ++i) {scanf ("%d", &a[i]); sum[i] = sum[i-] + a[i];}
- if (sum[n] < s) {puts (""); continue;}
- int ans = n;
- for (int i=; sum[i]+s<=sum[n]; ++i)
- {
- int p = lower_bound (sum+i, sum++n, sum[i] + s) - sum;
- ans = min (ans, p - i);
- }
- printf ("%d\n", ans);
- }
- return ;
- }
- /*
- 2
- 10 15
- 5 1 3 5 10 7 4 9 2 8
- 5 11
- 1 2 3 4 5
- */
- #include <cstdio>
- #include <algorithm>
- #include <cstring>
- #include <cmath>
- using namespace std;
- typedef long long ll;
- const int MAXN = 1e5 + ;
- const int INF = 0x3f3f3f3f;
- int a[MAXN];
- int main(void) //POJ 3601 Subsequence
- {
- int t; scanf ("%d", &t);
- while (t--)
- {
- int n, s;
- scanf ("%d%d", &n, &s);
- for (int i=; i<=n; ++i) scanf ("%d", &a[i]);
- int ans = n + ; int i = , j = ; ll sum = ;
- while ()
- {
- while (j <= n && sum < s) sum += a[j++];
- if (sum < s) break;
- ans = min (ans, j - i);
- sum -= a[i++];
- }
- if (ans == n + ) puts ("");
- else printf ("%d\n", ans);
- }
- return ;
- }
- /*
- 2
- 10 15
- 5 1 3 5 10 7 4 9 2 8
- 5 11
- 1 2 3 4 5
- */
O (n)
尺取法 POJ 3601 Subsequence的更多相关文章
- POJ 3061 Subsequence 尺取法 POJ 3320 Jessica's Reading Problem map+set+尺取法
Subsequence Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 13955 Accepted: 5896 Desc ...
- 尺取法 poj 2566
尺取法:顾名思义就是像尺子一样一段一段去取,保存每次的选取区间的左右端点.然后一直推进 解决问题的思路: 先移动右端点 ,右端点推进的时候一般是加 然后推进左端点,左端点一般是减 poj 2566 题 ...
- 尺取法 POJ 3320 Jessica's Reading Problem
题目传送门 /* 尺取法:先求出不同知识点的总个数tot,然后以获得知识点的个数作为界限, 更新最小值 */ #include <cstdio> #include <cmath> ...
- 尺取法 || POJ 2739 Sum of Consecutive Prime Numbers
给一个数 写成连续质数的和的形式,能写出多少种 *解法:先筛质数 然后尺取法 **尺取法:固定区间左.右端点为0,如果区间和比目标值大则右移左端点,比目标值小则右移右端点 ...
- POJ 3061 Subsequence(尺取法)
Subsequence Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 18145 Accepted: 7751 Desc ...
- POJ 3061 Subsequence ( 尺取法)
题目链接 Description A sequence of N positive integers (10 < N < 100 000), each of them less than ...
- 题解报告:poj 3061 Subsequence(前缀+二分or尺取法)
Description A sequence of N positive integers (10 < N < 100 000), each of them less than or eq ...
- POJ 3061 Subsequence 二分或者尺取法
http://poj.org/problem?id=3061 题目大意: 给定长度为n的整列整数a[0],a[1],--a[n-1],以及整数S,求出总和不小于S的连续子序列的长度的最小值. 思路: ...
- POJ 3061 Subsequence 尺取法
转自博客:http://blog.chinaunix.net/uid-24922718-id-4848418.html 尺取法就是两个指针表示区间[l,r]的开始与结束 然后根据题目来将端点移动,是一 ...
随机推荐
- Eclipse luna 装不上 veloeclipse
今天在Eclipse中始终无法安装veloeclipse ,报错:Failed to prepare partial IU: [R]com.googlecode.veloeclipse.ui 2.0. ...
- coco2d-x怎样创建project
不知道coco2d-x从那个版本号開始用python创建project,一句话搞定,确实省去了好多麻烦. 首先定位到coco2d-x的文件夹到cocos2d-x-2.2.3\cocos2d-x-2.2 ...
- android-调用系统的ContentPrivder获取单张图片实现剪切做头像及源代码下载
首先讲述这个小项目的特色: 1.调用系统的相冊应用获取单张图片 2.对单张图片进行剪切方便做成指定大小的头像图片 3.对获取图片的结果进行解析,使用三种方式进行. 首先看看效果图: 打开app,进入注 ...
- adb端口被占用情况下如何杀掉进程
1.CMD命令窗口输入:adb nodaemon server .然后就会提示你哪个端口被占用了. 2.输入netstat -ano | findstr "5037" .然后会弹出 ...
- POJO与javabean的区别
POJO 和JavaBean是我们常见的两个关键字,一般容易混淆,POJO全称是Plain Ordinary Java Object / Pure Old Java Object,中文可以翻译成:普通 ...
- java Http post请求发送json字符串
最近差点被业务逻辑搞懵逼,果然要先花时间思考,确定好流程再执行.目前最好用的jar包还是org.apache.http. public class HttpClientHelper { private ...
- V4L学习
http://blog.csdn.net/wangrunmin/article/details/7764768# http://blog.sina.com.cn/s/blog_a44175a90101 ...
- RK3288-OTA编译失败解决办法【转】
本文转载自:http://blog.csdn.net/wangxueming/article/details/52448630 在执行make otapackage的时候出现该错误,是由于drmsi ...
- YTU 1008: 童年生活二三事
1008: 童年生活二三事 时间限制: 1000 Sec 内存限制: 64 MB 提交: 842 解决: 592 题目描述 Redraiment小时候走路喜欢蹦蹦跳跳,他最喜欢在楼梯上跳来跳去. ...
- HDU - 4333 Revolving Digits(拓展kmp+最小循环节)
1.给一个数字字符串s,可以把它的最后一个字符放到最前面变为另一个数字,直到又变为原来的s.求这个过程中比原来的数字小的.相等的.大的数字各有多少. 例如:字符串123,变换过程:123 -> ...