NC25136 [USACO 2006 Ope B]Cows on a Leash
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的更多相关文章
- USACO 2006 November Gold Corn Fields
USACO 2006 November Gold Corn Fields 题目描述: Farmer John has purchased a lush new rectangular pasture ...
- 【bzoj2591】[Usaco 2012 Feb]Nearby Cows 树形dp
题目描述 Farmer John has noticed that his cows often move between nearby fields. Taking this into accoun ...
- USACO section1.2 Miking cows
/* ID: vincent63 LANG: C TASK: milk2 */ #include <stdio.h> #include<stdlib.h> #include&l ...
- 【BZOJ】【1717】【USACO 2006 Dec】Milk Patterns产奶的模式
后缀数组 o(︶︿︶)o 唉傻逼了一下,忘了把后缀数组的字典范围改回20001,直接21交了上去,白白RE了两发……sigh 既然要找出现了K次的子串嘛,那当然要用后缀数组了>_>(因为我 ...
- 【BZOJ】【1662】/【POJ】【3252】 【USACO 2006 Nov】Round Number
数位DP 同上一题Windy数 预处理求个组合数 然后同样的方法,这次是记录一下0和1的个数然后搞搞 Orz cxlove /************************************* ...
- USACO 2006 November Gold
POJ 3253 Fence Repair STL堆操作 我想说,STL里堆是我目前见到最蛋疼的操作. #include <cstdio> #include <cstring> ...
- 【usaco 2006 feb gold】 牛棚安排
终于自己独立做出来一道题QAQ然而本校数据实在太水不能确定我是不是写对了... 原题: Farmer John的N(1<=N<=1000)头奶牛分别居住在农场所拥有的B(1<=B&l ...
- USACO Section1.2 Milking Cows 解题报告
milk2解题报告 —— icedream61 博客园(转载请注明出处)---------------------------------------------------------------- ...
- USACO 1.2 Milking Cows (枚举)
标记数组(哈希) 1e6的范围,开一个char数组全然能够,有人为1,无人为0,注意边界就可以.最后线性扫描就可以. 时间复杂度,应该是O(n),n为最后结束的时间. 缺点就是--比較慢 /* ID: ...
随机推荐
- CSS一个较为完整的页面布局_可以根据页面屏幕大小调整布局
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="U ...
- SoftPool:基于Softmax加权的池化操作 | 2021新文
SoftPool使用softmax进行加权池化,能够保持特征的表达性并且是可微操作.从性能和准确率来看,SoftPool是目前的常规池化方法的一个不错的替代品 来源:晓飞的算法工程笔记 公众号 论 ...
- insert语句生成的存储过程
问题: 1.如何配置数据库数据: 方式一:图形界面点击输入数据,导出成sql. 缺点:表多,数据多的时候非常繁琐,字段含义需要另外开窗口对照. 方式二:徒手写或者修改已有语句:insert table ...
- idea打开service窗口
- 巧用 Docker 快速部署 GPU 环境
公众号关注 「开源Linux」 回复「学习」,有我为您特别筛选的学习资料~ 在 Linux 服务器上使用 GPU 跑深度学习的模型很正常不过.如果我们想用 Docker 实现同样的需求,就需要做些额外 ...
- 一个程序的自我修养「GitHub 热点速览 v.22.19」
一个程序要诞生涉及前后端技术,比如,你可以用可视化网页搭建工具 tmagic-editor 完成前端部分,而后端部分的数据库以及数据处理可能就要用到 jsonhero-web 和 directus.知 ...
- KMP算法学习以及小结(好马不吃回头草系列)
首先请允许我对KMP算法的三位创始人Knuth,Morris,Pratt致敬,这三位优秀的算法科学家发明的这种匹配模式可以大大避免重复遍历的情况,从而使得字符串的匹配的速度更快,效率更高. 首先引入对 ...
- ThinkPHP V6.0.12在php8.1下验证码出现问题
一.问题描述 1.项目需求要求使用PHP8.1.*版本 2.运行程序发现验证码不生效报错如下: 二.错误描述 1.报错信息得出:从浮点(数字)到整数的隐式转换将失去精度 三.解决流程 1.找到报错文件 ...
- 用c++语言socket库函数实现服务端客户端聊天室
客户端 /* * 程序名:client.cpp,此程序用于演示socket的客户端 * 作者:C语言技术网(www.freecplus.net) 日期:20190525 */ #include < ...
- Vue的vue-router基本使用
一.Vue-router是什么? Vue Router是Vue.js的路由管理器.和Vue.js的核心深度集成,是SPA单页应用的路径管理器,适合用于构建单页面应用.Vue的单页面应用是基于路由和组件 ...