题目链接:http://poj.org/problem?id=3061

题意:给n个正整数和一个数S,求出总和不小于S的连续子序列的长度的最小值,如果无解输出0;

我们可以用sum[i]表示前i项的和;然后二分枚举找答案即可时间复杂度为O(n*logn)的;

  1. #include<iostream>
  2. #include<algorithm>
  3. #include<string.h>
  4. #include<stdio.h>
  5. #include<math.h>
  6. using namespace std;
  7. #define N 120000
  8. #define PI 4*atan(1.0)
  9. #define mod 110119
  10. #define met(a, b) memset(a, b, sizeof(a))
  11. typedef long long LL;
  12.  
  13. int a[N], n, s, sum[N];
  14.  
  15. int Judge(int len)
  16. {
  17. for(int i=; i+len-<=n; i++)
  18. {
  19. if(sum[i+len-]-sum[i-]>=s)
  20. return ;
  21. }
  22. return ;
  23. }
  24.  
  25. int main()
  26. {
  27. int T;
  28. scanf("%d", &T);
  29. while(T--)
  30. {
  31. scanf("%d %d", &n, &s);
  32.  
  33. for(int i=; i<=n; i++)
  34. {
  35. scanf("%d", &a[i]);
  36. sum[i] = sum[i-] + a[i];
  37. }
  38.  
  39. int L = , R = n, Min = ;
  40.  
  41. while(L <= R)
  42. {
  43. int Mid = (L+R)/;
  44. if(Judge(Mid))
  45. {
  46. Min = Mid;
  47. R = Mid-;
  48. }
  49. else
  50. L = Mid+;
  51. }
  52. printf("%d\n", Min);
  53. }
  54. return ;
  55. }

还可以用尺取法,就是用两个指针控制一下头和尾,然后移动即可;时间复杂度是O(n)的;

  1. #include<iostream>
  2. #include<algorithm>
  3. #include<string.h>
  4. #include<stdio.h>
  5. #include<math.h>
  6. using namespace std;
  7. #define N 120000
  8. #define PI 4*atan(1.0)
  9. #define mod 110119
  10. #define met(a, b) memset(a, b, sizeof(a))
  11. typedef long long LL;
  12.  
  13. int a[N], n, s;
  14.  
  15. int main()
  16. {
  17. int T;
  18. scanf("%d", &T);
  19. while(T--)
  20. {
  21. scanf("%d %d", &n, &s);
  22.  
  23. for(int i=; i<=n; i++)
  24. scanf("%d", &a[i]);
  25.  
  26. int L = , R = , ans = n+, sum = ;
  27.  
  28. while()
  29. {
  30. while(R<=n && sum<s)
  31. sum += a[R++];
  32. if(sum < s) break;
  33. ans = min(ans, R-L);
  34. sum -= a[L++];
  35. }
  36. if(ans == n+)ans = ;
  37. printf("%d\n", ans);
  38. }
  39. return ;
  40. }

Subsequence---poj3061(尺取法||二分)的更多相关文章

  1. poj3061 Subsequence(尺取法)

    https://vjudge.net/problem/POJ-3061 尺取发,s和t不断推进的算法.因为每一轮s都推进1所以复杂度为O(n) #include<iostream> #in ...

  2. poj3061 Subsequence ,尺取法

    A sequence of N positive integers (10 < N < 100 000), each of them less than or equal 10000, a ...

  3. POJ3061 尺取法

    题目大意:从给定序列里找出区间和大于等于S的最小区间的长度. 前阵子在zzuli OJ上见过类似的题,还好当时补题了.尺取法O(n) 的复杂度过掉的.尺取法:从头遍历,如果不满足条件,则将尺子尾 部增 ...

  4. poj3061尺取法

    A sequence of N positive integers (10 < N < 100 000), each of them less than or equal 10000, a ...

  5. POJ 3061 Subsequence ( 尺取法)

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

  6. poj 3061 题解(尺取法|二分

    题意 $ T $ 组数据,每组数据给一个长度 $ N $ 的序列,要求一段连续的子序列的和大于 $ S $,问子序列最小长度为多少. 输入样例 2 10 15 5 1 3 5 10 7 4 9 2 8 ...

  7. Codeforces 1156C 尺取法 / 二分

    题意:给你一个数组,问里面最多能匹配出多少对,满足abs(a[i] - a[j]) >= k; 思路:首先肯定要排序. 思路1(尺取法):看了dreamoon的代码明白的.我们可以寻找一个最长的 ...

  8. 【UVALive】2678 Subsequence(尺取法)

    题目 传送门:QWQ 分析 一开始没看到都是正整数根本不会做...... 看到了就是水题了.(但还是sb WA了一发) 尺取法搞一搞 代码 #include <bits/stdc++.h> ...

  9. poj3061 Subsequence【尺取法】

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

随机推荐

  1. vux ajax请求 及 跨域

    1)使用 AjaxPlugin 插件(在组件里使用) 引入插件 import { AjaxPlugin } from 'vux' 初始化 export default { components: { ...

  2. Nginx SSL配置

    一.SSL 原理 ① 客户端( 浏览器 )发送一个 https 请求给服务器② 服务器要有一套证书,其实就是公钥和私钥,这套证书可以自己生成,也可以向组织申请,服务器会把公钥传输给客户端③ 客户端收到 ...

  3. Google TensorFlow 机器学习框架介绍和使用

    TensorFlow是什么? TensorFlow是Google开源的第二代用于数字计算(numerical computation)的软件库.它是基于数据流图的处理框架,图中的节点表示数学运算(ma ...

  4. hadoop参数传递

    传参关键代码: //从配置文件获取参数,必须在作业创建的前面 conf.addResource("hadoop-bigdata.xml"); keepUrl=conf.get(&q ...

  5. c++对象的生命周期

    C++ 的new 运算子和C 的malloc 函数都是为了配置内存,但前者比之后者的优点是,new 不但配置对象所需的内存空间时,同时会引发构造式的执行. 所谓构造式(constructor),就是对 ...

  6. mysqlint类型的长度值mysql在建表的时候int类型后的长度代表什么

    详解mysql int类型的长度值 mysql在建表的时候int类型后的长度代表什么 是该列允许存储值的最大宽度吗 为什么我设置成int(1), 也一样能存10,100,1000呢. 当时我虽然知道i ...

  7. WP8.1学习系列(第十七章)——交互UX之输入和反馈模式

    如果你将 Windows 应用商店应用设计为触摸交互,则可免费获取对触摸板.鼠标.笔和键盘交互的支持.你的用户可以从一种输入法切换到另一种,而不会丧失应用体验的感觉.将键盘插入平板电脑?没问题.你的应 ...

  8. 部署OpenStack问题汇总(七)--解决apache启动错误"httpd:Could not reliably determine..."

    今天在调试openstack的时候,重启apache,出现以下报错: [root@hctrl log]# service httpd restart 停止 httpd:[确定] 正在启动 httpd: ...

  9. Struts2之命名空间与Action的三种创建方式

    看到上面的标题,相信大家已经知道我们接下来要探讨的知识了,一共两点:1.package命名空间设置:2.三种Action的创建方式.下面我们开始本篇的内容: 首先我们聊一聊命名空间的知识,namesp ...

  10. How arduino IDE works?

    test.ino void setup() { pinMode(,OUTPUT); } void loop() { digitalWrite(,HIGH); delay(); digitalWrite ...