题目:
http://acm.hdu.edu.cn/showproblem.php?pid=1050
本想按着贪心,根据末尾房间号排序,然后怎么都过不了。。。
看了网上的思路(http://www.voidcn.com/article/p-zrwvvwtt-ke.html),简单很多,把上面那半边的奇数房间号全部+1,变成偶数的,就可以不用考虑上下两边不同情况了,只要对每段移动经过的房间号计数,找出重复最多那个房间号,要想完成任务,那么这个重复最多的房间门前至少得走那么多次,所以最短完成时间就是这个最大重复的次数*10.
AC代码:
#include <iostream>
#include <algorithm>
#include <fstream>
using namespace std;
int main(void)
{
// ifstream fin("in.txt");
// cin.rdbuf(fin.rdbuf());
int t;
cin >> t;
while (t--)
{
int N;
cin >> N;
int visited[401] = {0};
for (int i = 0; i < N; i++)
{
int a, b;
cin >> a >> b;
if (a & 1)
a++;
if (b & 1)
b++;
if (a > b)
swap(a, b);
for (int j = a; j <= b; j++)
visited[j]++;
}
int maxx = 0;
for (int i = 0; i <= 400; i++)
maxx = max(maxx, visited[i]);
cout << maxx * 10 << endl;
}
return 0;
}