NC25136 [USACO 2006 Ope B]Cows on a Leash

题目

题目描述

给定如图所示的若干个长条。你可以在某一行的任意两个数之间作一条竖线,从而把这个长条切开,并可能切开其他长条。问至少要切几刀才能把每一根长条都切开。样例如图需要切两刀。



注意:输入文件每行的第一个数表示开始的位置,而第二个数表示长度。

输入描述

Line \(1\) : A single integer, \(N\) (\(2 <= N <= 32000\))

Lines \(2 \cdots N+1\): Each line contains two space-separated positive integers that describe a leash. The first is the location of the leash's stake; the second is the length of the leash.(\(1 <= length <= 1e7\))

输出描述

Line \(1\) : A single integer that is the minimum number of cuts so that each leash is cut at least once.

示例1

输入

7
2 4
4 7
3 3
5 3
9 4
1 5
7 3

输出

2

题解

思路

知识点:排序,贪心。

我们希望每次分割的时候能分割最多的段,并且希望这个分割位置容易找到。

排序各行相对情况不影响结果,考虑以右端点从小到大排序,并从左到右切。而此时如果选择切一条带子,假设前面的带子已经切过了,切在带子最右端是最好的,因为后面的带子如果能切到一定与这条带子右端点有交集,从而选择最右端能最大化。

然后找到后面一条不能切到的带子重复操作,得到最小切割数。

注意:这里要切在两个数中间,因此注意下一次允许切割段从这段的右端点坐标开始。

当然这道题也可以理解为安排活动问题,找到最多不重合的区间,就是最终答案。

时间复杂度 \(O(n \log n)\)

空间复杂度 \(O(n)\)

代码

#include <bits/stdc++.h>

using namespace std;

pair<int, int> a[32007];

int main() {
std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int n;
cin >> n;
for (int i = 0;i < n;i++) cin >> a[i].first >> a[i].second, a[i].second += a[i].first;
sort(a, a + n, [&](pair<int, int> a, pair<int, int> b) {return a.second == b.second ? a.first < b.first : a.second < b.second;});
int cnt = 0, last = 0;
for (int i = 0;i < n;i++) {
if (last <= a[i].first) {
cnt++;
last = a[i].second;
}
}
cout << cnt << '\n';
return 0;
}

NC25136 [USACO 2006 Ope B]Cows on a Leash的更多相关文章

  1. USACO 2006 November Gold Corn Fields

    USACO 2006 November Gold Corn Fields 题目描述: Farmer John has purchased a lush new rectangular pasture ...

  2. 【bzoj2591】[Usaco 2012 Feb]Nearby Cows 树形dp

    题目描述 Farmer John has noticed that his cows often move between nearby fields. Taking this into accoun ...

  3. USACO section1.2 Miking cows

    /* ID: vincent63 LANG: C TASK: milk2 */ #include <stdio.h> #include<stdlib.h> #include&l ...

  4. 【BZOJ】【1717】【USACO 2006 Dec】Milk Patterns产奶的模式

    后缀数组 o(︶︿︶)o 唉傻逼了一下,忘了把后缀数组的字典范围改回20001,直接21交了上去,白白RE了两发……sigh 既然要找出现了K次的子串嘛,那当然要用后缀数组了>_>(因为我 ...

  5. 【BZOJ】【1662】/【POJ】【3252】 【USACO 2006 Nov】Round Number

    数位DP 同上一题Windy数 预处理求个组合数 然后同样的方法,这次是记录一下0和1的个数然后搞搞 Orz cxlove /************************************* ...

  6. USACO 2006 November Gold

    POJ 3253 Fence Repair STL堆操作 我想说,STL里堆是我目前见到最蛋疼的操作. #include <cstdio> #include <cstring> ...

  7. 【usaco 2006 feb gold】 牛棚安排

    终于自己独立做出来一道题QAQ然而本校数据实在太水不能确定我是不是写对了... 原题: Farmer John的N(1<=N<=1000)头奶牛分别居住在农场所拥有的B(1<=B&l ...

  8. USACO Section1.2 Milking Cows 解题报告

    milk2解题报告 —— icedream61 博客园(转载请注明出处)---------------------------------------------------------------- ...

  9. USACO 1.2 Milking Cows (枚举)

    标记数组(哈希) 1e6的范围,开一个char数组全然能够,有人为1,无人为0,注意边界就可以.最后线性扫描就可以. 时间复杂度,应该是O(n),n为最后结束的时间. 缺点就是--比較慢 /* ID: ...

随机推荐

  1. Infrastructure 知识: DNS 命令: dig, host

    dig 基本用法: dig @server name type 或者用-t type来指定(更常见) dig @server -t type name 例子详解 # 最简单的使用 $ dig www. ...

  2. wireshark、tcpdump使用笔记

    最近使用wireshark抓包icmp协议,过滤的命令如下所示: ip.addr eq 192.168.20.54 and ip.addr eq 192.168.50.131 and (icmp) 如 ...

  3. vue build 指定环境

    前言 其实很简单的东西,搜索时很是费劲,特此记录下来.网上有很多资料,但都是五花八门,特此记录 使用 项目根目录中创建环境变量使用文件 .env #所有环境都会加载 .env.development ...

  4. 攻防世界-MISC:base64stego

    这是攻防世界新手练习区的第十一题,题目如下: 点击下载附件一,发现是一个压缩包,点击解压,发现是需要密码才能解密 先用010editor打开这个压缩包,这里需要知道zip压缩包的组成部分,包括压缩源文 ...

  5. [AcWing 53] 最小的 k 个数

    堆排序 点击查看代码 class Solution { public: vector<int> getLeastNumbers_Solution(vector<int> inp ...

  6. 【CSAPP】Architecture Lab 实验笔记

    archlab属于第四章的内容.这章讲了处理器体系结构,就CPU是怎样构成的.看到时候跃跃欲试,以为最后实验是真要去造个CPU,配套资料也是一如既往的豪华,合计四十多页的参考手册,一大包的源码和测试程 ...

  7. golang get process name by pid

    一个很好的问题:How golang to get process name by process id (pid)? 目前看来go api并没有提供通过pid获取进程名称的方法,可以通过 /proc ...

  8. 生成器对象(自定义迭代器),自定义range方法,模块

    自定义迭代器 一 .生成器与yield ''' 我们得到一个迭代器通常都是调用可迭代对象的__iter__方法 ,例如 list.iter() 得到一个迭代器, 但是当list很大时候,就违背了pyt ...

  9. 解读论文《Agglomerative clustering of a search engine query log》,以解决搜索推荐相关问题

    <Agglomerative clustering of a search engine query log> 论文作者:Doug Beeferman 本文将解读此篇论文,此论文利用搜索日 ...

  10. 637. Average of Levels in Binary Tree - LeetCode

    Question 637. Average of Levels in Binary Tree Solution 思路:定义一个map,层数作为key,value保存每层的元素个数和所有元素的和,遍历这 ...