找点
时间限制:
2000 ms | 内存限制:
65535 KB
难度:
2
-
描述
-
上数学课时,老师给了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
区间选点,先按左点排序,如果第二组的左点比第一组的右点大,sum++,否则如果第二组的右点比第一组的右点大,将第二组右点换成第一组右点
01.
#include<iostream>
02.
#include<algorithm>
03.
using
namespace
std;
04.
struct
Node
05.
{
06.
int
x,y;
07.
};
08.
bool
cmp(Node a,Node b)
09.
{
10.
return
a.x<b.x;
11.
}
12.
int
main()
13.
{
14.
Node a[110];
15.
int
N;
16.
while
(cin>>N)
17.
{
18.
for
(
int
i=0;i<N;i++)
19.
{
20.
cin>>a[i].x>>a[i].y;
21.
}
22.
sort(a,a+N,cmp);
23.
int
sum=1;
24.
for
(
int
i=1;i<N;i++)
25.
{
26.
if
(a[i].x>a[i-1].y)
27.
sum++;
28.
else
29.
a[i].y=min(a[i-1].y,a[i].y);
30.
}
31.
cout<<sum<<endl;
32.
}
33.
return
0;
34.
}
-
多组测试数据。