区间找点问题
- 描述
-
上数学课时,老师给了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
传送门:http://acm.nyist.net/JudgeOnline/problem.php?pid=8911 #include<stdio.h>/*贪心策略*/ 2 #include<algorithm> 3 using namespace std; 4 typedef struct 5 { 6 int a;/*左右端点*/ 7 int b; 8 }region; 9 int cmp(region M1,region M2) 10 { 11 if(M1.b!=M2.b) 12 return M1.b<M2.b; 13 return M1.a>=M2.a; 14 } 15 int main() 16 { 17 int N; 18 while(scanf("%d",&N)==1) 19 { 20 int i,j,count=1,k; 21 region p[N]; 22 for(i=0;i<N;i++) 23 scanf("%d%d",&p[i].a,&p[i].b); 24 sort(p,p+N,cmp); 25 /* for(i=0;i<N;i++) 26 printf("%d %d\n",p[i].a,p[i].b);*/ 27 k=0; 28 for(i=1;i<N;i++) 29 { 30 if(p[i].a>p[k].b) 31 { 32 count++; 33 k=i; 34 continue; 35 } 36 37 } 38 printf("%d\n",count); 39 40 } 41 }