数轴上有n个闭区间[ai, bi]。取尽量少的点,使得每个区间内都至少有一个点(不同区间内含的点可以是同一个)。
第一行一个数字n,表示有n个闭区间。 下面n行,每行包含2个数字,表示闭区间[ai, bi]
一个整数,表示至少需要几个点
在这里给出一组输入。例如:
3 1 3 2 4 5 6
在这里给出相应的输出。例如:
2
#include <iostream> #include <algorithm> using namespace std; struct SEC //每个区间 { int left; int right; }; bool cmp(SEC s1, SEC s2) { if (s1.right == s2.right) return s1.left > s2.left; else return s1.right < s2.right; } int main() { int n, f = -1000000, ans = 0; //f是标志位 cin >> n; SEC sections[n]; for (int i = 0; i < n; i++) { cin >> sections[i].left >> sections[i].right; } sort(sections, sections + n, cmp); //将右端点从小到大排序 for (int i = 0; i < n; i++) { if (sections[i].left > f) //将本区间的左端点和上一区间的右端点作比较 { f = sections[i].right; ans++; } } cout << ans; return 0; }
大家要是觉得有帮助就点个赞吧~