POJ 3061 Subsequence ( 二分 || 尺取法 )
题意 : 找出给定序列长度最小的子序列,子序列的和要求满足大于或者等于 S,如果存在则输出最小长度、否则输出 0(序列的元素都是大于 0 小于10000)
分析 : 有关子序列和的问题,都可以考虑采用先构造前缀和的方式来进行接下来的操作 ( 任意子序列的和都能由某两个前缀和的差表示 )。
二分做法 ==> 我们枚举起点,对于每一个起点 St 二分查找看看 St 后面有没有前缀和是大于或者等于 [ St的前缀和 ] + S 的,如果有说明从当前起点开始有一个终点使得起终之和是大于或者等于 S 的,在这个过程中维护最小长度即可!时间复杂度为 O(nlogn)
#include<bits/stdc++.h>
using namespace std;
;
int arr[maxn], sum[maxn];
int main(void)
{
int nCase;
scanf("%d", &nCase);
sum[] = ;
while(nCase--){
int n, s;
scanf("%d %d", &n, &s);
; i<=n; i++){
scanf("%d", &arr[i]);
sum[i] = sum[i-] + arr[i];
}
if(sum[n] < s){
puts(");
continue;
}
int ans = n;
; i<=n; i++){
;
int en = lower_bound(sum+st, sum+n, sum[st]+s) - sum;
//printf("%d %d\n", st, en);
if(sum[en] - sum[st] < s) continue;
ans = min(ans, en - st);
}
printf("%d\n", ans);
}
;
}
尺取做法 ==> 如果有一个满足条件的子序列为 arr[st]...arr[en-1] >= S,那么肯定有 arr[st+1]...arr[en-2] < arr[st]...arr[en-2] < S,所以如果将 st+1 作为起点也有满足条件的序列且令其终点为en'-1,那么必定有 en'-1 >= en-1,那么也就是说当前枚举完 st 这个点,其贡献的答案是 (en-1)-st+1,现在我们考虑 st+1 即下一个起点的时候考虑的终点应该是要考虑大于或者等于 en-1 的点,故尺取是正确的解法。时间复杂度为O(n)
///尺取法
#include<bits/stdc++.h>
using namespace std;
;
int sum[maxn];
int main(void)
{
sum[] = ;
int nCase;
scanf("%d", &nCase);
while(nCase--){
int n, s;
scanf("%d %d", &n, &s);
int tmp;
; i<=n; i++)
scanf("%d", &tmp),
sum[i] = sum[i-] + tmp;///统计前缀和
if(sum[n] < s){
puts(");
continue;
}
int L, R, ans;///左指针、右指针
ans = n;
L = R = ;
while(L <= R && R <= n){
if(sum[R] - sum[L] < s) R++;
else{
ans = min(ans, R-L);
L++;
}
}
printf("%d\n", ans);
}
;
}
POJ 3061 Subsequence ( 二分 || 尺取法 )的更多相关文章
- POJ 3061 Subsequence ( 尺取法)
题目链接 Description A sequence of N positive integers (10 < N < 100 000), each of them less than ...
- POJ 3061 Subsequence(尺取法)
题目链接: 传送门 Subsequence Time Limit: 1000MS Memory Limit: 65536K 题目描述 给定长度为n的数列整数以及整数S.求出总和不小于S的连续子 ...
- POJ 3061 Subsequence 二分或者尺取法
http://poj.org/problem?id=3061 题目大意: 给定长度为n的整列整数a[0],a[1],--a[n-1],以及整数S,求出总和不小于S的连续子序列的长度的最小值. 思路: ...
- poj 3061 Subsequence 二分 前缀和 双指针
地址 http://poj.org/problem?id=3061 解法1 使用双指针 由于序列是连续正数 使用l r 表示选择的子序列的起始 每当和小于要求的时候 我们向右侧扩展 增大序列和 每当和 ...
- Poj 3061 Subsequence(二分+前缀和)
Subsequence Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 12333 Accepted: 5178 Descript ...
- POJ 3061 Subsequence 二分查找
题目大意:给出长度为n的一个序列,给出一个数字S,求长度最短的序列和大于等于S的连续子序列,输出该长度,如果没有答案输出0. 题目思路:看数据范围,这道题就是卡时间的.我们可以用sum[i]记录前i项 ...
- 题解报告: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【二分答案】||【尺取法】
<题目链接> 题目大意: 给你一段长度为n的整数序列,并且给出一个整数S,问你这段序列中区间之和大于等于S的最短区间长度是多少. 解题分析:本题可以用二分答案做,先求出前缀和,然后枚举区间 ...
- POJ 3061 Subsequence 尺取法 POJ 3320 Jessica's Reading Problem map+set+尺取法
Subsequence Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 13955 Accepted: 5896 Desc ...
随机推荐
- 【Qt开发】QThread中的互斥、读写锁、信号量、条件变量
在gemfield的<从pthread到QThread>一文中我们了解了线程的基本使用,但是有一大部分的内容当时说要放到这片文章里讨论,那就是线程的同步问题.关于这个问题,gemfield ...
- kafka学习(八)
管理kafka 主题操作 1.在集群里创建一个主题需要用到3个参数.这些参数是必须提供的,尽管有些已经有broker级别的默认值. 主题名字,想要创建的主题的名字,主题名字可以包含字母,数 ...
- 记:第一次更新服务器CUDA和GPU驱动
因有需求需要改动centos7中的CUDA(更新到10)和GUP 的driver(更新到410)的版本. 事先需要查看原版本的信息,使用nvidia-smi可以查看driver的版本信息(最新的也显示 ...
- asp.net获取访问者ip地址的函数
/// <summary> /// 获取IP地址 /// </summary> public static string IPAddress { get { string us ...
- JS封装插件:实现文件读写功能
scripting.FileSystemObject是一个可以实现文件读写的COM组件,由于COM组件可以被跨语言调用,因此可以选择像vbs或者JS这种脚本语言调用,下面我就使用该COM组件封装了一个 ...
- codeforces 597 div 2
A 题意: 有无限个方块,上面分别是0,1,2......若方块i可以被表示为ax+by(x,y>0),则方块为白色,否则为黑色,给出a,b.问黑方块是否有无限个. 分析: 1:若(a,b)=1 ...
- 封装 多态 类的约束 super
python面向对象的三大特性:继承,封装,多态. 1. 封装: 把很多数据封装到⼀个对象中. 把固定功能的代码封装到⼀个代码块, 函数, 对象, 打包成模块. 这都属于封装的思想. 具体的情况具体分 ...
- Could not locate executable null\bin\winutils.exe in the Hadoop binaries解决方式
1. 问题: 2. 问题解决: 仔细查看报错是缺少winutils.exe程序. Hadoop都是运行在Linux系统下的,在windows下eclipse中运行mapreduce程序,要首先安装 ...
- django模板传入参数的处理方式与反向生成url
前端模板传入参数的处理方式 1.传入单个参数: 前端使用href="/sel-{{ row.0 }}.html, url使用url(r'sel-(.+).html',home.index), ...
- thinkphp5 隐藏前台入口文件index.php 后台入口文件admin.php不隐藏
情景:应用目录下有两个模块 admin(后台) 和 home(前台) 需求:1.访问前台(home)时隐藏index.php 即 域名/home/前台控制器/前台控制器里的方法 这样的访问模式 2. ...