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;
}
posted @ 2025-08-17 21:23  晋小云  阅读(57)  评论(0)    收藏  举报