上数学课时,老师给了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++,依次进行
-
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; struct node{ int s; int e; }book[105]; int cmp(node x,node y){ if(x.e!=y.e) return x.e<y.e; else return x.s>x.s; } int main(){ int n,a,b; int i,j,k,sum; while(scanf("%d",&n)!=EOF){ k=n; for(i=0;i<n;i++){ scanf("%d%d",&book[i].s,&book[i].e); } sort(book,book+n,cmp); sum=1; j=book[0].e; for(i=1;i<n;i++){ if(book[i].s>j){ j=book[i].e; sum++; } } printf("%d\n",sum); } return 0; }