描述
上数学课时,老师给了LYH一些闭区间,让他取尽量少的点,使得每个闭区间内至少有一个点。但是这几天LYH太忙了,你们帮帮他吗?
输入
多组测试数据。
每组数据先输入一个N,表示有N个闭区间(N≤100)。
接下来N行,每行输入两个数a,b(0≤a≤b≤100),表示区间的两个端点。
输出
输出一个整数,表示最少需要找几个点。
样例输入
4
1 5
2 4
1 4
2 3
3
1 2
3 4
5 6
1
2 2
样例输出
1
3
1
思路: 右端点递增排序,如果右端点相等则左端点递减 这是区间选点的思想
#include<stdio.h>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=101;
struct node
{
double x,y;
} a[maxn];
bool cmp(node a,node b)
{
if(a.y==b.y)
return a.x>b.x;
return a.y<b.y;
}
int n;
int main()
{
while(~scanf("%d",&n))
{
for(int i=0; i<n; i++)
scanf("%lf%lf",&a[i].x,&a[i].y);
sort(a,a+n,cmp);
int sum=0;
int end=-1;
for(int i=0; i<n; i++)
{
if(a[i].x>end)
{
end=a[i].y;
sum++;
}
}
printf("%d\n",sum);
}
return 0;
}