找点
时间限制:
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
-
多组测试数据。
-
区间找点 右端点从小到大排序 (相等时左端点从大到小排序(不排也可以)) 为了找出点最少 选择区间的最右端 遍历所有区间 当该区间的左端点大于上一个点时点数加一,更新上一个点的值
#include<stdio.h> #include<iostream> #include<algorithm> using namespace std; struct xxx { int a,b; } k[1000]; int cmp(xxx m1,xxx m2) { if(m1.b==m2.b) return m1.a>m2.a; else return m1.b<m2.b; } int main() { int n,i; while(cin>>n) { for(i=0; i<n; i++) cin>>k[i].a>>k[i].b; sort(k,k+n,cmp); int ans=1; int f=k[0].b; for(i=1; i<n; i++) { if(k[i].a<=f) continue; else { ans++; f=k[i].b; } } cout<<ans<<endl; } return 0; }