和最短序列

  题目大意:找出一个序列中比至少和S相等的最短子序列(连续的)

  本来这道题可以二分法来做复杂度O(NlogN),也可以用一个类似于游标卡尺的方法O(N)来做

  先来讲游标卡尺法:

  因为子序列是连续的,所以我们只用维护这个序列的开头和结尾就行了,保证这个序列的和一定要大于S,如果从头到尾的和都没S大那就直接输出0就好,ans初始化为n+1

  

 #include <iostream>
#include <functional>
#include <algorithm> using namespace std; static int nums[]; int main(void)
{
int tests_sum, S, num_sum, lb, rb, tmp_sum, ans;
scanf("%d", &tests_sum); while (tests_sum--)
{
scanf("%d%d", &num_sum, &S);
for (int i = ; i < num_sum; i++)
scanf("%d", &nums[i]); lb = ; rb = ; tmp_sum = ; ans = num_sum + ;
while ()
{
while (rb < num_sum && tmp_sum < S)
tmp_sum += nums[rb++];
if (tmp_sum < S)
break;
ans = min(ans, rb - lb);
tmp_sum -= nums[lb++];
}
printf("%d\n", ans>num_sum ? : ans);
}
return ;
}

  

 二分做法:主要是对sum进行枚举,我们知道sum一定是按照下标递增的(数都是正数),那么我们只要二分枚举到一个sum[t]-sum[s](也就是序列的值)比S刚好大就好了(lower_bound的功能)

 #include <iostream>
#include <functional>
#include <algorithm> using namespace std; static int nums[],nums_sum_set[]; int main(void)
{
int tests_sum, S, num_sum, rb, ans;
scanf("%d", &tests_sum);
while (tests_sum--)
{
scanf("%d%d", &num_sum, &S);
for (int i = ; i < num_sum; i++)
scanf("%d", &nums[i]);
for (int i = ; i < num_sum; i++)
nums_sum_set[i + ] = nums_sum_set[i] + nums[i]; if (nums_sum_set[num_sum] < S)
printf("0\n");
else
{
ans = num_sum + ;
for (int i = ; nums_sum_set[i] + S <= nums_sum_set[num_sum]; i++)
{
rb = lower_bound(nums_sum_set + i, nums_sum_set + num_sum, nums_sum_set[i] + S) - nums_sum_set;//和越小,说明偏移量越小
ans = min(ans, rb - i);
}
printf("%d\n", ans);
}
}
return ;
}

  

Greedy:Subsequence(POJ 3061)的更多相关文章

  1. Subsequence poj 3061 二分(nlog n)或尺取法(n)

    Subsequence Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9236   Accepted: 3701 Descr ...

  2. Subsequence POJ - 3061

    Subsequence Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 22040   Accepted: 9404 Desc ...

  3. poj 3061 Subsequence

    题目连接 http://poj.org/problem?id=3061 Subsequence Description A sequence of N positive integers (10 &l ...

  4. POJ - 3061 Subsequence(连续子序列和>=s的最短子序列长度)

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

  5. POJ 3061 Subsequence(Two Pointers)

    [题目链接] http://poj.org/problem?id=3061 [题目大意] 给出S和一个长度为n的数列,问最短大于等于S的子区间的长度. [题解] 利用双指针获取每一个恰好大于等于S的子 ...

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

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

  7. poj 3061 Subsequence 二分 前缀和 双指针

    地址 http://poj.org/problem?id=3061 解法1 使用双指针 由于序列是连续正数 使用l r 表示选择的子序列的起始 每当和小于要求的时候 我们向右侧扩展 增大序列和 每当和 ...

  8. POJ 3061 Subsequence(尺取法)

    题目链接: 传送门 Subsequence Time Limit: 1000MS     Memory Limit: 65536K 题目描述 给定长度为n的数列整数以及整数S.求出总和不小于S的连续子 ...

  9. Poj 3061 Subsequence(二分+前缀和)

    Subsequence Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 12333 Accepted: 5178 Descript ...

随机推荐

  1. PHP中spl_autoload_register()函数

    spl_autoload_register — 注册给定的函数作为 __autoload 的实现 官方地址:http://php.net/manual/zh/function.spl-autoload ...

  2. [设计模式] javascript 之 组合模式

    组合模式说明 组合模式用于简单化,一致化对单组件和复合组件的使用:其实它就是一棵树: 这棵树有且只有一个根,访问入口,如果它不是一棵空树,那么由一个或几个树枝节点以及子叶节点组成,每个树枝节点还包含自 ...

  3. 常见的几个angular.js的问题

    来源于网络收集 一.ng-show/ng-hide 与 ng-if的区别? 我们都知道ng-show/ng-hide实际上是通过display来进行隐藏和显示的.而ng-if实际上控制dom节点的增删 ...

  4. 增值税——基础知识

    一.增值税的概念 增值税是对从事销售货物或者提供加工.修理修配劳务以及从事进出口货物的单位和个人取得的增值额为课税对象征收的一种税. 增值额是指纳税人在生产.经营或劳务活动中所创造的新增价值,即纳税人 ...

  5. java 练手 Fibonacci数

    Problem B Fibonacci数 时间限制:3000 ms  |  内存限制:65535 KB   描述 无穷数列1,1,2,3,5,8,13,21,34,55...称为Fibonacci数列 ...

  6. ORACLE连接字符串里每个参数的具体意思

    1.数据库名(db_name):数据库名是存储在控制文件中的数据库的名称.它代表的是数据库也就是所有构成数据库的物理文件的总称.要修改这个名称,只要重建控制文件就行了.2.实例名:实例名指的是用于响应 ...

  7. window 常用软件

    参考链接: http://www.aiweibang.com/yuedu/721140.html http://www.aiweibang.com/yuedu/145263218.html 1.wox ...

  8. 01Getting Started---Getting Started with ASP.NET Web API 2入门WebApi2

    HTTP 不只是为了生成 web 页面.它也是建立公开服务和数据的 Api 的强大平台.HTTP 是简单的. 灵活的和无处不在.你能想到的几乎任何平台有 HTTP 库,因此,HTTP 服务可以达到范围 ...

  9. 一次失败的动态转换bean的尝试与思考

    前因 公司规范确定不允许使用反射类的进行属性bean的拷贝了,只允许手动的get/set,可以猜到这样定义的原因是制定规范的同事认为反射性能低,虽然写get/set慢点好在性能高.平时开发的时候也是迫 ...

  10. MongoDB的索引(三)

    MongoDB的索引: 1. _id索引 该索引是大多数集合默认创建的索引,也就是说用户每插入一个数据,MongoDB会自动生成一条唯一的_id字段. 2. 单键索引 单键索引是最普通的索引,它不会自 ...