POJ 2376 Cleaning Shifts 区间贪心
来源:互联网 发布:java创建日志文件 编辑:程序博客网 时间:2024/05/17 05:50
很简单的贪心,按照区间的开始位置从小到大,如果开始位置相同,就按照结束位置从小到大排序。
然后不断的延伸区间,假如当前区间是[1,5] 接下来我们开始寻找有哪些区间的开始位置小于5呢?结果我们发现有2个区间[2,6],[3,7],然后我们选择结束位置靠后的那个,也就是[3,7],所以现在的区间就被我们延伸成了[1,7]。以此类推,看最后能不能延伸到[1,T]
注意三个点
1.排序结束后,第一个区间的开始位置一定是1
2.[1,3]和[4,5]认为是连续的区间段
3.假如现在区间是[1,7],我们继续寻找到[5,6],[4,6]但是发现这两个区间的结束位置都不能使得区间延伸。也就是寻找到的区间不一定都是可以更新的。
#include "set"#include "map"#include "queue"#include "stack"#include "cmath"#include "cstdio"#include "cstdlib"#include "iostream"#include "algorithm"#define EPS 1e-10#define MAX_N 30000#define Pi acos(-1.0)#define INF 0x3f3f3f3fusing namespace std;struct data{ int s, t; bool operator < (const data & b) const { return s < b.s || (s == b.s && t < b.t); }};data cow[MAX_N];int N, T;int solve(){ sort(cow, cow + N); int res = 0, q = 0, last = 0;//last表示当前区间的结束位置,res表示已经使用的区间个数,q是下标 if (cow[0].s != 1) return -1; while (q < N) { int p = q; while (q < N && cow[q].s <= last + 1) q++; if (q == p) break;//说明我们已经寻找不到有更新可能的区间了 int m = -1, j; for (int i = p; i < q; i++) { if (m < cow[i].t && cow[i].t > last) { m = cow[j = i].t; } } if (m == -1) break;//说明我们寻找到的区间都更新不了当前区间 res++; last = m; } if (last == T) return res; return -1;}int main (){ //freopen ("in.txt", "r", stdin); //freopen ("out.txt", "w", stdout); while (~scanf("%d%d", &N, &T)) { for (int i = 0; i < N; i++) { scanf("%d%d", &cow[i].s, &cow[i].t); } printf("%d\n", solve()); } return 0;}
0 0
- poj 2376 Cleaning Shifts 贪心 区间问题
- POJ 2376 Cleaning Shifts 【贪心 区间】
- POJ 2376 Cleaning Shifts(贪心,区间问题)
- POJ 2376 Cleaning Shifts 区间贪心
- [POJ 2376] Cleaning Shifts (区间贪心)
- POJ 2376 Cleaning Shifts 区间贪心
- Cleaning Shifts POJ - 2376(区间覆盖,排序+贪心)
- POJ NO.2376 Cleaning Shifts(贪心,区间重叠)
- POJ 2376 Cleaning Shifts (贪心区间最少覆盖)
- [poj 2376] Cleaning Shifts [最小区间覆盖 贪心]
- POJ 2376-Cleaning Shifts [贪心] [区间] 《挑战程序设计竞赛》2.2
- poj 2376 Cleaning Shifts( 贪心 )
- POJ 2376 Cleaning Shifts 贪心
- poj 2376 Cleaning Shifts( 贪心 )
- poj 2376 Cleaning Shifts 贪心
- 贪心-poj 2376-Cleaning Shifts
- POJ 2376 - Cleaning Shifts(贪心)
- Cleaning Shifts - POJ 2376 贪心
- 使用Parity建立Proof-of-Authority (PoA) Ethereum Chain5分钟快速从无到有建立Ethereum联盟链
- mybatis + DB2数据库常见报错:jdbc type 0 not yet supported
- FPGA 延时和 吞吐率 Latency versus Throughput
- 【Hibernate】hql小结
- POJ 1573 Robot Motion (模拟)
- POJ 2376 Cleaning Shifts 区间贪心
- 自定义圆形头像CirclemageView
- 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。时间复杂度都是O(1)
- 抛开 React 学习 React(2)
- 如何查看新买手机是否翻新机?
- Kaggle项目Digit Recognizer实现(一):三层卷积神经网络
- 编译完android源码并且已经make sdk之后,重启不能调用emulator命令解决方案
- python学习笔记——基础篇(3):函数的定义
- java的重载、覆盖和隐藏的区别