1 条题解

  • 0
    @ 2023-1-12 10:29:00
    #include <bits/stdc++.h>
    using namespace std;
    int a[10000000]; // a[i]: i时刻开始的这一秒钟有几个人在挤奶
    int main()
    {
        int n;
        cin >> n;
        int maxr = 0, minl = 99999999;
        for (int k = 1; k <= n; k++)
        {
            int l, r;
            cin >> l >> r; // 当前挤奶工的工作时间为 l~r
            for (int i = l; i <= r - 1; i++)
                a[i]++;
            maxr = max(maxr, r); // 记录最大值
            minl = min(minl, l); // 记录最小值
        }
        int ans1 = 0, ans2 = 0;
        int last = minl; // 上一个时刻
        for (int k = minl + 1; k <= maxr; k++)
        {
            //如果当前无人挤奶并且前一个时间有人挤奶
            if (a[k] == 0 && a[k - 1] > 0)
            {
                ans1 = max(ans1, k - last);//前一个有人挤奶的时间长度为 k-last
                last = k;
            }
            //如果当前有人挤奶并且前一个时间无人挤奶
            if (a[k] > 0 && a[k - 1] == 0)
            {
                ans2 = max(ans2, k - last);//前一个无人挤奶的时间长度为 k-last
                last = k;
            }
        }
        //最后一段有人挤奶的时间
        if (a[maxr] > 0)
            ans1 = max(ans1, maxr - last);
        cout << ans1 << " " << ans2;
        return 0;
    }
    
    • 1

    信息

    ID
    928
    时间
    1000ms
    内存
    125MiB
    难度
    7
    标签
    递交数
    117
    已通过
    25
    上传者