uva10020 - Minimal coverage(区间覆盖)
2016-02-28 22:47
337 查看
题意:
区间覆盖问题,给你一些区间,让你用最少的区间数覆盖【0,M】,并输出所用区间。
思路:
跟上次写的UVA 10382 Watering Grass一个套路,上次写的应该是该题的变形题。
代码:
区间覆盖问题,给你一些区间,让你用最少的区间数覆盖【0,M】,并输出所用区间。
思路:
跟上次写的UVA 10382 Watering Grass一个套路,上次写的应该是该题的变形题。
代码:
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int N = 100005; struct seg{ int l, r; }a ,ans ; int cmp(seg a,seg b) { return a.l < b.l ; } int main() { int cas; scanf("%d", &cas); while (cas--) { memset(ans, 0, sizeof(ans)); memset(a, 0, sizeof(a)); int m; scanf("%d", &m); int left, right; int n = 0; while (~scanf("%d%d", &left, &right) ) { if (!left&&!right) break; a .l = left; a .r = right; n++; } sort(a, a + n, cmp); int cnt = 0, ok = 0, pos = n; left = 0; right = 0; if (a[0].l <= 0) { int i = 0; while (i < n) { int j = i; while (j < n&&a[j].l <= left) { if (a[j].r > right) { right = a[j].r; pos = j; } j++; } if (j == i) break; i = j; left = right; cnt++; ans[cnt] = a[pos]; if (right >= m) { ok = 1; break; } } } if (ok) { printf("%d\n", cnt); for (int i = 1; i <= cnt; i++) printf("%d %d\n", ans[i].l, ans[i].r); } else printf("0\n"); } return 0; }
相关文章推荐
- 数据库逆向框架代码生成工具:MyBatis Generator的使用
- Linux内核及分析 第一周 计算机是如何工作的?
- Linux下搭建coreseek(sphinx+mmseg3)全文检索
- 21. Merge Two Sorted Lists
- UIView属性clipsTobounds的应用
- OA学习笔记-008-岗位管理Action层实现
- 使用JS实现RTMP协议直播(三)
- Toolbar使用方法
- HOJ-2056 Bookshelf(线性动态规划)
- ACM_模板_并查集
- HOJ-2056 Bookshelf(线性动态规划)
- 调查问卷
- Spiral Matrix II
- 3-9-模拟银行排队过程-栈和队列-第3章-《数据结构》课本源码-严蔚敏吴伟民版
- mktime的使用
- Android性能优化——优化下载以高效地访问网络
- ROS学习--轻松使用tf
- WPF中的DataGrid的RowDetail显示问题
- C语言字符串操作总结大全(超详细)
- 【MySQL】探究之TIMESTAMP