UVALive - 2326 Moving Tables

题目大意:在一个走廊上有400个教室, 现在有一些桌子要移动, 每次移动需要十分钟, 但是不同房间的桌子可以在同一个十分钟内移动,只要走廊没有被占用就可以, 注意教室序号1 和 2 是在对面。注意:给出的区间没有分左边或者是右边比较大。


解题思路:区间覆盖问题, 将所有给出的区间处理一下, 去除对面房间这样的情况。 让后将区间按照l 和 r 的值进行排序, 然后看进行几次区间覆盖可以使得所有区间均被用上。


#include <cstdio>
#include <algorithm>
using namespace std;

struct Road {
	int l;
	int r;
	int vis;
};

int cmp(Road a, Road b) {
	if (a.l != b.l)
		return a.l < b.l;
	return a.r < b.r;
}

int main() {
	int T, N;
	scanf("%d", &T);
	while (T--) {
		Road r[205] = {0};
		scanf("%d", &N);
		for (int i = 0; i < N; i++) {
			scanf("%d%d", &r[i].l, &r[i].r);
			if (r[i].l > r[i].r) 
				swap(r[i].l, r[i].r);
			r[i].l = (r[i].l + 1) / 2;
			r[i].r = (r[i].r + 1) / 2;
		}
		sort(r, r + N, cmp);
		int ans = 0;
		for (int cnt = 0; cnt < N; ans++)
			for (int i = 0, temp = 0; i < N; i++)
				if (r[i].vis == 0 && r[i].l > temp) {
					temp = r[i].r;
					r[i].vis = 1;
					cnt++;
				}

		printf("%d\n", ans*10);
	}
	return 0;
}


你可能感兴趣的:(UVALive - 2326 Moving Tables)