906. 区间分组

摘要
Title: 906. 区间分组
Tag: 贪心、最大区间厚度
Memory Limit: 64 MB
Time Limit: 1000 ms

Powered by:NEFU AB-IN

Link

906. 区间分组

  • 题意

    给定 N 个闭区间 [ai,bi],请你将这些区间分成若干组,使得每组内部的区间两两之间(包括端点)没有交集,并使得组数尽可能小。
    输出最小组数。

  • 思路

    将问题转化为

    有若干个活动,第i个活动开始时间和结束时间是[lil_i,rir_i],同一个教室安排的活动之间不能交叠,求要安排所有活动,少需要几个教室?

    有时间冲突的活动不能安排在同一间教室,与该问题的限制条件相同,即最小需要的教室个数即为该题答案。

    那么就可以将开始时间和结束时间放在一起排序,遇到开始时间就把需要的教室加1遇到结束时间就把需要的教室减1,取过程中需要教室的最大值即可

    如何区分左右区间?
    用奇偶性来判断左右区间即可

  • 代码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    '''
    Author: NEFU AB-IN
    Date: 2022-03-14 23:15:56
    FilePath: \ACM\Acwing\906.py
    LastEditTime: 2022-03-14 23:15:56
    '''
    N = int(1e5 + 10) * 2

    a = []
    n = int(input())
    idx = 0
    for i in range(n):
    l, r = map(int, input().split())
    a.append(l * 2)
    a.append(r * 2 + 1)

    a.sort()
    res, cnt = 0, 0
    for i in range(len(a)):
    if a[i] % 2 == 0:
    cnt += 1
    else:
    cnt -= 1
    res = max(res, cnt)
    print(res)
使用搜索:谷歌必应百度