找点
时间限制:
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<algorithm> #include<string.h> using namespace std; struct Node{ int x; int y; }node[101]; int cmp(Node a,Node b){ return a.y<b.y; } int main(){ int n; while(scanf("%d",&n)!=EOF){ for(int i=0;i<n;i++) { scanf("%d%d",&node[i].x,&node[i].y); } sort(node,node+n,cmp); int tol=1; int ss=node[0].y; for(int i=1;i<n;i++) { if(ss<node[i].x)//左端点大于标记的右端点,那么就没有重复的,需要再次取点 { ss=node[i].y; tol++; } } printf("%d\n",tol); } }
-
多组测试数据。