求助 #3 #4 #7 #8 WA
查看原帖
求助 #3 #4 #7 #8 WA
248302
d0j1a_1701楼主2020/7/13 08:32
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
vector<pair<int, int> > vec;
int n, ans1, ans2;
int main() {
    cin >> n;
    for(int i = 0; i < n; i++) {
        int l, r;
        cin >> l >> r;
        vec.push_back({l, r});
    }
    sort(vec.begin(), vec.end(), [](pair<int, int> a, pair<int, int> b) {
        return a.first < b.first;
    });
    int pre = vec[0].first, post = vec[0].first;
    for(auto &elm : vec) {
        if(elm.first > post) {//如果当前事件和上次连续事件不连续
            ans2 = max((elm.first - post), ans2);//判断最长无人挤奶时间段:这次事件的开始减上次连续事件的结尾
            ans1 = max((elm.second - elm.first), ans1);//判断最长至少有一人挤奶时间段:这次事件的结尾减这次事件的开始
            pre = elm.first;//连续事件开始变成当前事件开始
        } else { //如果当前事件和上一次事件连续
            ans1 = max((elm.second - pre), ans1);//判断最长至少有一人挤奶时间段:这次事件的结尾减上次连续事件的开始
            post = elm.second;//连续事件结尾变成当前事件结尾
        }
    }
    cout << ans1 << ' ' << ans2 << endl;
    system("pause");
    return 0;
}
/*
1  2  3  4  5  6  7  8  9  10 11 12 13 14 15 16 17 18 19 20
I__Event1__I
      I___Event2___I
                        I_______________Event3__________I

此时 最长连续事件是Event1-Event2(1~8)
最长无人挤奶时间是1(8-1)
Event1和Event2连续
Event2和Event3不连续
*/
2020/7/13 08:32
加载中...