uvalive 2326 - Moving Tables(区间覆盖问题)
2013-09-01 00:29
501 查看
题目连接:2326 - Moving Tables
题目大意:在一个走廊上有400个教室, 先在有一些桌子要移动, 每次移动需要十分钟, 但是不同房间的桌子可以在同一个十分钟内移动,只要走廊没有被占用就可以, 注意教室序号1 和 2 是在对面。
注意:给出的区间没有分左边或者是右边比较大。
解题思路:区间覆盖问题, 将所有给出的区间处理一下, 去除对面房间这样的情况。 让后将区间按照l 和 r 的值进行排序, 然后看进行几次区间覆盖可以使得所有区间均被用上。
题目大意:在一个走廊上有400个教室, 先在有一些桌子要移动, 每次移动需要十分钟, 但是不同房间的桌子可以在同一个十分钟内移动,只要走廊没有被占用就可以, 注意教室序号1 和 2 是在对面。
注意:给出的区间没有分左边或者是右边比较大。
解题思路:区间覆盖问题, 将所有给出的区间处理一下, 去除对面房间这样的情况。 让后将区间按照l 和 r 的值进行排序, 然后看进行几次区间覆盖可以使得所有区间均被用上。
#include <stdio.h> #include <string.h> #include <algorithm> using namespace std; const int N = 205; struct thing { int l; int r; }tmp ; bool cmp(const thing& a, const thing& b) { if (a.l != b.l) return a.l < b.l; else return a.r < b.r; } int main() { int cas, n, L, R, vis ; scanf("%d", &cas); while (cas--) { int ti = 0, cnt = 0; memset(vis, 0, sizeof(vis)); scanf("%d", &n); for (int i = 0; i < n; i++) { scanf("%d%d", &L, &R); if (L > R) { int t = R; R = L; L = t; } tmp[i].l = (L + 1) / 2; tmp[i].r = (R + 1) / 2; } sort(tmp, tmp + n, cmp); while (cnt < n) { ti++; int begin = 0; for (int i = 0; i < n; i++) { if (vis[i]) continue; if (tmp[i].l > begin) { begin = tmp[i].r; cnt++; vis[i] = 1; } } } printf("%d\n", ti * 10); } return 0; }
相关文章推荐
- uvalive 2326 - Moving Tables(区间覆盖问题)
- uvalive 2326 - Moving Tables(区间覆盖问题)
- UVAlive 2326 Moving Tables(贪心 + 区间问题)
- UVAlive 2326 Moving Tables(贪心 + 区间问题)
- UVAlive 2326 Moving Tables(贪心 + 区间问题)
- UVALive 2326 Moving Tables(贪心+不相交区间问题)
- UVALive 2326 Moving Tables 贪心
- POJ1083 HDU1050 ZOJ1029 UVALive2326 Moving Tables【序列+最值】
- UVa Live Archive 2326 - Moving Tables
- uvaLive 3222 Joke with Turtles 带权区间调度、覆盖问题 等价转换+线性动归
- UVALIVE 2326 moving tables 不相交区间问题
- UVALive - 2326 Moving Tables 贪心
- HDU ACM 1050 Moving Tables(贪心 + 区间覆盖问题)
- uvalive 2519 - Radar Installation(区间选点问题)
- UVA10382- Watering Grass(区间覆盖问题)
- UVALive 2519 Radar Installation 雷达扫描 区间选点问题
- UVA 10020 Minimal coverage(贪心 + 区间覆盖问题)
- HDU 1050 Moving Tables 【区间覆盖】
- UVa 10382 Watering Grass (区间覆盖贪心问题+数学)
- UVa221 以后用区间覆盖问题解决