问题 W: 【贪心】监测点
时间限制: 1 Sec 内存限制: 64 MB
题目描述
“多 么希望有一天突然惊醒,发现自己是在小学的一节课上睡着了,现在经历的一切都是一场梦,桌上满是你的口水。你告诉同桌,说做了一个好长好长的梦。同桌骂你 白痴,叫你好好听课。你看着窗外的球场,一切都那么熟悉,一切还充满希望……”张琪曼通过时空监测点听到40年前的小墨老师对李旭琳这样说。
话说张琪曼等人将历史时间线划分了n个区域,我们可以将之看成是数轴上的n个闭区间[ai,bi]。现要设置尽量少的监测点,使得每个区间内都至少有一个点(不同区间内含的点可以是同一个),请问需要多少个监测点?
输入
第一行为一个整数X,表示有X组数据,每组数据第一行为一个整数n(N≤100),表示有n个闭区间,随后n行每行为两个整数,表示区间左端a和右端b(0≤a≤b≤100)。
输出
一个整数,即监测点个数。
样例输入
1
3
1 5
2 8
6 9
样例输出
2
【思路】
先找出独立的互不相连的区间的个数。
【代码】
#include <bits/stdc++.h>
using namespace std;
struct data
{
int a,b;
}d[110];
int X,n,i,ans;
bool cmp(data A,data B)
{
if (A.b==B.b) return A.a<B.a;
return A.b<B.b;
}
int main()
{
scanf("%d",&X);
while (X--)
{
scanf("%d",&n);
for (i=0;i<n;++i)
scanf("%d%d",&d[i].a,&d[i].b);
sort(d,d+n,cmp);
ans=1;
int j=0;
for (i=1;i<n;++i)
{
if (d[i].a>d[j].b)
{
j=i;
ans++;
}
}
printf("%d\n",ans);
}
return 0;
}