1324:【例6.6】整数区间
题目描述
请编程完成以下任务:
1.读取闭区间的个数及它们的描述;
2.找到一个含元素个数最少的集合,使得对于每一个区间,都至少有一个整数属于该集合,输出该集合的元素个数。
输入格式
首行包括区间的数目n(1≤n≤10000),接下来的n行,每行包括两个整数a,b,被一空格隔开(0≤a≤b≤10000),它们是某一个区间的开始值和结束值。
输出格式
第一行集合元素的个数,对于每一个区间都至少有一个整数属于该集合,且集合所包含元素数目最少。
输入输出样例
输入
4
3 6
2 4
0 2
4 7
输出
2
参考代码
#include <bits/stdc++.h>
using namespace std;
struct Interval
{
int left, right;
};
Interval a[10010];
bool cmp(Interval x, Interval y)
{// 自定义排序规则
if(x.right == y.right) return x.left < y.left;
else return x.right < y.right;
}
int main()
{
int n;
cin >> n;
for(int i = 0; i < n; i++)
{
cin >> a[i].left >> a[i].right;
}
sort(a, a + n, cmp);//对数组进行排序,结构体
// for(int i = 0; i < n; i++)
// {
// cout << a[i].left << " " << a[i].right << endl;
// }
//选择点,贪心策略
int cnt = 1, pr = a[0].right;
for(int i = 1; i < n; i++)
{
if(a[i].left > pr)
{
cnt++;
pr = a[i].right;
}
}
cout << cnt << endl;
return 0;
}

浙公网安备 33010602011771号