歡迎加入我的 Discord 群組與我討論程式相關的問題!

Posted on 

 by 

 in ,

CSES – Restaurant Customers

評分:1 分,滿分為 5。

題目連結

題意

有 n 組客人來餐廳用餐,第 i 組客人進去和離開的時間用 a[i], b[i] 表示,最多同時有幾組客人在餐廳裡面?

解題方法

利用一個 vector <pair<int,int> > 把區間拆成開頭及結尾,利用 pair 第二個 true / false 紀錄是開頭還是結尾。將 vector 照排序完後,從小到大開始跑,每次遇到開頭進入的人數就加一,遇到結尾就減一。只要找到總和出現過的最大值就是答案。

    int n;
    cin >> n;
    vector <pair<int,bool> > v;
    for(int i = 0;i < n;i++){
        int a, b;
        cin >> a >> b;
        v.push_back({a,true});
        v.push_back({b,false});
    }
    sort(v.begin(), v.end());
    int ans = 0, sum = 0;
    for(int i = 0;i < v.size();i++){
        if(v[i].second) sum++;
        else sum--;
        ans = max(ans, sum);
    }
    cout << ans << '\n';

發表迴響

Blog at WordPress.com.

%d 位部落客按了讚: