找点
时间限制:
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 <cstdio> #include <iostream> #include <algorithm> using namespace std; struct res { int left; int right; }a[100]; bool cmp(res a,res b) { if(a.right==b.right) return a.left<b.left; else return a.right<b.right; } int main() { int i,x; while(scanf("%d",&x)!=EOF) { for(i=0;i<x;i++) scanf("%d %d",&a[i].left,&a[i].right); sort(a,a+x,cmp); int sum=1; int j=0; for(i=j+1;i<x;i++) if(a[i].left>a[j].right) { sum++; j=i; } cout<<sum<<endl; } return 0; }
//每天进步一些