Subsequence---poj3061(尺取法||二分)
题目链接:http://poj.org/problem?id=3061
题意:给n个正整数和一个数S,求出总和不小于S的连续子序列的长度的最小值,如果无解输出0;
我们可以用sum[i]表示前i项的和;然后二分枚举找答案即可时间复杂度为O(n*logn)的;
- #include<iostream>
- #include<algorithm>
- #include<string.h>
- #include<stdio.h>
- #include<math.h>
- using namespace std;
- #define N 120000
- #define PI 4*atan(1.0)
- #define mod 110119
- #define met(a, b) memset(a, b, sizeof(a))
- typedef long long LL;
- int a[N], n, s, sum[N];
- int Judge(int len)
- {
- for(int i=; i+len-<=n; i++)
- {
- if(sum[i+len-]-sum[i-]>=s)
- return ;
- }
- return ;
- }
- int main()
- {
- int T;
- scanf("%d", &T);
- while(T--)
- {
- scanf("%d %d", &n, &s);
- for(int i=; i<=n; i++)
- {
- scanf("%d", &a[i]);
- sum[i] = sum[i-] + a[i];
- }
- int L = , R = n, Min = ;
- while(L <= R)
- {
- int Mid = (L+R)/;
- if(Judge(Mid))
- {
- Min = Mid;
- R = Mid-;
- }
- else
- L = Mid+;
- }
- printf("%d\n", Min);
- }
- return ;
- }
还可以用尺取法,就是用两个指针控制一下头和尾,然后移动即可;时间复杂度是O(n)的;
- #include<iostream>
- #include<algorithm>
- #include<string.h>
- #include<stdio.h>
- #include<math.h>
- using namespace std;
- #define N 120000
- #define PI 4*atan(1.0)
- #define mod 110119
- #define met(a, b) memset(a, b, sizeof(a))
- typedef long long LL;
- int a[N], n, s;
- int main()
- {
- int T;
- scanf("%d", &T);
- while(T--)
- {
- scanf("%d %d", &n, &s);
- for(int i=; i<=n; i++)
- scanf("%d", &a[i]);
- int L = , R = , ans = n+, sum = ;
- while()
- {
- while(R<=n && sum<s)
- sum += a[R++];
- if(sum < s) break;
- ans = min(ans, R-L);
- sum -= a[L++];
- }
- if(ans == n+)ans = ;
- printf("%d\n", ans);
- }
- return ;
- }
Subsequence---poj3061(尺取法||二分)的更多相关文章
- poj3061 Subsequence(尺取法)
https://vjudge.net/problem/POJ-3061 尺取发,s和t不断推进的算法.因为每一轮s都推进1所以复杂度为O(n) #include<iostream> #in ...
- poj3061 Subsequence ,尺取法
A sequence of N positive integers (10 < N < 100 000), each of them less than or equal 10000, a ...
- POJ3061 尺取法
题目大意:从给定序列里找出区间和大于等于S的最小区间的长度. 前阵子在zzuli OJ上见过类似的题,还好当时补题了.尺取法O(n) 的复杂度过掉的.尺取法:从头遍历,如果不满足条件,则将尺子尾 部增 ...
- poj3061尺取法
A sequence of N positive integers (10 < N < 100 000), each of them less than or equal 10000, a ...
- POJ 3061 Subsequence ( 尺取法)
题目链接 Description A sequence of N positive integers (10 < N < 100 000), each of them less than ...
- poj 3061 题解(尺取法|二分
题意 $ T $ 组数据,每组数据给一个长度 $ N $ 的序列,要求一段连续的子序列的和大于 $ S $,问子序列最小长度为多少. 输入样例 2 10 15 5 1 3 5 10 7 4 9 2 8 ...
- Codeforces 1156C 尺取法 / 二分
题意:给你一个数组,问里面最多能匹配出多少对,满足abs(a[i] - a[j]) >= k; 思路:首先肯定要排序. 思路1(尺取法):看了dreamoon的代码明白的.我们可以寻找一个最长的 ...
- 【UVALive】2678 Subsequence(尺取法)
题目 传送门:QWQ 分析 一开始没看到都是正整数根本不会做...... 看到了就是水题了.(但还是sb WA了一发) 尺取法搞一搞 代码 #include <bits/stdc++.h> ...
- poj3061 Subsequence【尺取法】
Description A sequence of N positive integers (10 < N < 100 000), each of them less than or eq ...
随机推荐
- vux ajax请求 及 跨域
1)使用 AjaxPlugin 插件(在组件里使用) 引入插件 import { AjaxPlugin } from 'vux' 初始化 export default { components: { ...
- Nginx SSL配置
一.SSL 原理 ① 客户端( 浏览器 )发送一个 https 请求给服务器② 服务器要有一套证书,其实就是公钥和私钥,这套证书可以自己生成,也可以向组织申请,服务器会把公钥传输给客户端③ 客户端收到 ...
- Google TensorFlow 机器学习框架介绍和使用
TensorFlow是什么? TensorFlow是Google开源的第二代用于数字计算(numerical computation)的软件库.它是基于数据流图的处理框架,图中的节点表示数学运算(ma ...
- hadoop参数传递
传参关键代码: //从配置文件获取参数,必须在作业创建的前面 conf.addResource("hadoop-bigdata.xml"); keepUrl=conf.get(&q ...
- c++对象的生命周期
C++ 的new 运算子和C 的malloc 函数都是为了配置内存,但前者比之后者的优点是,new 不但配置对象所需的内存空间时,同时会引发构造式的执行. 所谓构造式(constructor),就是对 ...
- mysqlint类型的长度值mysql在建表的时候int类型后的长度代表什么
详解mysql int类型的长度值 mysql在建表的时候int类型后的长度代表什么 是该列允许存储值的最大宽度吗 为什么我设置成int(1), 也一样能存10,100,1000呢. 当时我虽然知道i ...
- WP8.1学习系列(第十七章)——交互UX之输入和反馈模式
如果你将 Windows 应用商店应用设计为触摸交互,则可免费获取对触摸板.鼠标.笔和键盘交互的支持.你的用户可以从一种输入法切换到另一种,而不会丧失应用体验的感觉.将键盘插入平板电脑?没问题.你的应 ...
- 部署OpenStack问题汇总(七)--解决apache启动错误"httpd:Could not reliably determine..."
今天在调试openstack的时候,重启apache,出现以下报错: [root@hctrl log]# service httpd restart 停止 httpd:[确定] 正在启动 httpd: ...
- Struts2之命名空间与Action的三种创建方式
看到上面的标题,相信大家已经知道我们接下来要探讨的知识了,一共两点:1.package命名空间设置:2.三种Action的创建方式.下面我们开始本篇的内容: 首先我们聊一聊命名空间的知识,namesp ...
- How arduino IDE works?
test.ino void setup() { pinMode(,OUTPUT); } void loop() { digitalWrite(,HIGH); delay(); digitalWrite ...