题目传送门

  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. typedef long long ll;
  13. const int MAXN = 1e5 + ;
  14. const int INF = 0x3f3f3f3f;
  15. int a[MAXN];
  16. ll sum[MAXN];
  17. int main(void) //POJ 3601 Subsequence
  18. {
  19. int t; scanf ("%d", &t);
  20. while (t--)
  21. {
  22. memset (sum, , sizeof (sum));
  23. int n, s;
  24. scanf ("%d%d", &n, &s);
  25. for (int i=; i<=n; ++i) {scanf ("%d", &a[i]); sum[i] = sum[i-] + a[i];}
  26. if (sum[n] < s) {puts (""); continue;}
  27. int ans = n;
  28. for (int i=; sum[i]+s<=sum[n]; ++i)
  29. {
  30. int p = lower_bound (sum+i, sum++n, sum[i] + s) - sum;
  31. ans = min (ans, p - i);
  32. }
  33. printf ("%d\n", ans);
  34. }
  35. return ;
  36. }
  37. /*
  38. 2
  39. 10 15
  40. 5 1 3 5 10 7 4 9 2 8
  41. 5 11
  42. 1 2 3 4 5
  43. */

  1. #include <cstdio>
  2. #include <algorithm>
  3. #include <cstring>
  4. #include <cmath>
  5. using namespace std;
  6. typedef long long ll;
  7. const int MAXN = 1e5 + ;
  8. const int INF = 0x3f3f3f3f;
  9. int a[MAXN];
  10. int main(void) //POJ 3601 Subsequence
  11. {
  12. int t; scanf ("%d", &t);
  13. while (t--)
  14. {
  15. int n, s;
  16. scanf ("%d%d", &n, &s);
  17. for (int i=; i<=n; ++i) scanf ("%d", &a[i]);
  18. int ans = n + ; int i = , j = ; ll sum = ;
  19. while ()
  20. {
  21. while (j <= n && sum < s) sum += a[j++];
  22. if (sum < s) break;
  23. ans = min (ans, j - i);
  24. sum -= a[i++];
  25. }
  26. if (ans == n + ) puts ("");
  27. else printf ("%d\n", ans);
  28. }
  29. return ;
  30. }
  31. /*
  32. 2
  33. 10 15
  34. 5 1 3 5 10 7 4 9 2 8
  35. 5 11
  36. 1 2 3 4 5
  37. */

O (n)

尺取法 POJ 3601 Subsequence的更多相关文章

  1. POJ 3061 Subsequence 尺取法 POJ 3320 Jessica's Reading Problem map+set+尺取法

    Subsequence Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 13955   Accepted: 5896 Desc ...

  2. 尺取法 poj 2566

    尺取法:顾名思义就是像尺子一样一段一段去取,保存每次的选取区间的左右端点.然后一直推进 解决问题的思路: 先移动右端点 ,右端点推进的时候一般是加 然后推进左端点,左端点一般是减 poj 2566 题 ...

  3. 尺取法 POJ 3320 Jessica's Reading Problem

    题目传送门 /* 尺取法:先求出不同知识点的总个数tot,然后以获得知识点的个数作为界限, 更新最小值 */ #include <cstdio> #include <cmath> ...

  4. 尺取法 || POJ 2739 Sum of Consecutive Prime Numbers

    给一个数 写成连续质数的和的形式,能写出多少种 *解法:先筛质数 然后尺取法 **尺取法:固定区间左.右端点为0,如果区间和比目标值大则右移左端点,比目标值小则右移右端点               ...

  5. POJ 3061 Subsequence(尺取法)

    Subsequence Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 18145   Accepted: 7751 Desc ...

  6. POJ 3061 Subsequence ( 尺取法)

    题目链接 Description A sequence of N positive integers (10 < N < 100 000), each of them less than ...

  7. 题解报告:poj 3061 Subsequence(前缀+二分or尺取法)

    Description A sequence of N positive integers (10 < N < 100 000), each of them less than or eq ...

  8. POJ 3061 Subsequence 二分或者尺取法

    http://poj.org/problem?id=3061 题目大意: 给定长度为n的整列整数a[0],a[1],--a[n-1],以及整数S,求出总和不小于S的连续子序列的长度的最小值. 思路: ...

  9. POJ 3061 Subsequence 尺取法

    转自博客:http://blog.chinaunix.net/uid-24922718-id-4848418.html 尺取法就是两个指针表示区间[l,r]的开始与结束 然后根据题目来将端点移动,是一 ...

随机推荐

  1. Eclipse luna 装不上 veloeclipse

    今天在Eclipse中始终无法安装veloeclipse ,报错:Failed to prepare partial IU: [R]com.googlecode.veloeclipse.ui 2.0. ...

  2. coco2d-x怎样创建project

    不知道coco2d-x从那个版本号開始用python创建project,一句话搞定,确实省去了好多麻烦. 首先定位到coco2d-x的文件夹到cocos2d-x-2.2.3\cocos2d-x-2.2 ...

  3. android-调用系统的ContentPrivder获取单张图片实现剪切做头像及源代码下载

    首先讲述这个小项目的特色: 1.调用系统的相冊应用获取单张图片 2.对单张图片进行剪切方便做成指定大小的头像图片 3.对获取图片的结果进行解析,使用三种方式进行. 首先看看效果图: 打开app,进入注 ...

  4. adb端口被占用情况下如何杀掉进程

    1.CMD命令窗口输入:adb nodaemon server .然后就会提示你哪个端口被占用了. 2.输入netstat -ano | findstr "5037" .然后会弹出 ...

  5. POJO与javabean的区别

    POJO 和JavaBean是我们常见的两个关键字,一般容易混淆,POJO全称是Plain Ordinary Java Object / Pure Old Java Object,中文可以翻译成:普通 ...

  6. java Http post请求发送json字符串

    最近差点被业务逻辑搞懵逼,果然要先花时间思考,确定好流程再执行.目前最好用的jar包还是org.apache.http. public class HttpClientHelper { private ...

  7. V4L学习

    http://blog.csdn.net/wangrunmin/article/details/7764768# http://blog.sina.com.cn/s/blog_a44175a90101 ...

  8. RK3288-OTA编译失败解决办法【转】

    本文转载自:http://blog.csdn.net/wangxueming/article/details/52448630 在执行make  otapackage的时候出现该错误,是由于drmsi ...

  9. YTU 1008: 童年生活二三事

    1008: 童年生活二三事 时间限制: 1000 Sec  内存限制: 64 MB 提交: 842  解决: 592 题目描述 Redraiment小时候走路喜欢蹦蹦跳跳,他最喜欢在楼梯上跳来跳去. ...

  10. HDU - 4333 Revolving Digits(拓展kmp+最小循环节)

    1.给一个数字字符串s,可以把它的最后一个字符放到最前面变为另一个数字,直到又变为原来的s.求这个过程中比原来的数字小的.相等的.大的数字各有多少. 例如:字符串123,变换过程:123 -> ...