模拟。
把不相交的归为一个集合。
注意输入房间号的大小关系不定。
#include <iostream>
#include <cstdio>
#include <vector>
#include <cstring>
#include <algorithm>
using namespace std;
const int MAX = 200;
struct Point
{
int l;
int r;
void adjust ()
{
if (l > r)
swap(l, r);
l = (l&1) ? (l/2+1) : (l/2);
r = (r&1) ? (r/2+1) : (r/2);
}
};
int n;
Point scope[MAX+2];
vector <int> ans;
bool _cmp(Point a, Point b)
{
return (a.l < b.l || (a.l == b.l && a.r < b.r));
}
int find_far(int lo)
{
int key = lo;
int index = -1;
int sz = ans.size();
for (int i = 0; i < sz; i++)
{
if (ans[i] < key)
{
key = ans[i];
index = i;
}
}
return index;
}
int main()
{
int T;
int kase = 0;
scanf("%d", &T);
while (++kase <= T)
{
// init
ans.clear();
memset(scope, 0, sizeof(scope));
// input
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
scanf("%d%d", &scope[i].l, &scope[i].r);
scope[i].adjust();
}
// sort
sort(scope, scope+n, _cmp);
// deal
for (int i = 0; i < n; i++)
{
int index = find_far(scope[i].l);
if (index != -1)
ans[index] = scope[i].r;
else
ans.push_back(scope[i].r);
}
// print
printf("%d\n", ans.size() * 10);
}
return 0;
}