您的位置:首页 > 其它

uvalive 2326 - Moving Tables(区间覆盖问题)

2013-09-01 00:29 501 查看
题目连接:2326 - Moving Tables

题目大意:在一个走廊上有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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: