信息学奥赛一本通:1324:【例6.6】整数区间

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

此题和上题1323【例6.5】活动选择一样的道理。我只加了个等号^-^

//好像电影节,和上一题及相似,取结束时间排序(区间的终点),相同的以开始时间(区间的开始点)再排序 
//用第一个的终点作为查找另一个的开始点,比它小的,相等的不行 
//找到后,再重复把终点作为开始点来查下一个。 
//Writed by Wangzhimin Date:2023/11/22
#include<bits/stdc++.h>
using namespace std;
struct  huo {//
    int b;
    int e;
    bool operator<(const huo & h)//
    {
    if(e==h.e)
    return b<h.b;
        else
        return e<h.e;    
    }
             }huos[1005];
int main()
{
    int i,j,n;
    scanf("%d",&n);//有几组 
    for(i=0;i<n;i++)//输入的存入结构体 
    scanf("%d%d",&huos[i].b,&huos[i].e);
    sort(huos,huos+n);//排序 
    int begini,sum=1;
    begini=huos[0].e;//把第一个的结束时间作为查下一个的开始时间 
        for(i=1;i<n;i++){
        if(begini>=huos[i].b)
        continue;//没合适的,i就加1,再查 
        else//开始时间符合要求,就把这个的结束时间作为开始时间再查 
        {
            begini=huos[i].e;
            sum++;
        }
    }
    printf("%d",sum);
}

//信息学奥赛的贪心都做完了,哈哈哈哈哈

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值