제출 #1242753

#제출 시각아이디문제언어결과실행 시간메모리
1242753andrewgopher이상한 기계 (APIO19_strange_device)C++20
10 / 100
434 ms33412 KiB
#include "bits/stdc++.h"
using namespace std;
#define fast ios_base::sync_with_stdio(0) , cin.tie(0) , cout.tie(0)
#define endl '\n'
using ll=long long;

void solve() {
    int n;
    ll a,b;
    cin >> n >> a >> b;
    ll m = a*b/gcd(b+1,a);

    //vector<pair<ll,ll>> ivals;
    vector<pair<ll,bool>> evs;

    ll ans = -1;
    for (int i =0;i<n;i++){
        ll l,r;
        cin >> l >> r;

        if (r-l >= m-1){
            ans = m;
            continue;
        }

        //add interval
        if (l%m <= r%m){
            evs.push_back({l%m,true});
            evs.push_back({r%m,false});
        } else {
            evs.push_back({l%m,true});
            evs.push_back({m-1,false});
            evs.push_back({0,true});

            evs.push_back({r%m,false});
        }
    }
    if (ans!=-1){
        cout << ans << endl;
        return;
    }

    ans=0;

    sort(evs.begin(),evs.end(),[&](pair<ll,bool>&a, pair<ll,bool>& b){
            if (a.first != b.first){
            return a.first<b.first;
            } else{
            return a.second;
            }
    });
    int i=0;
    int curis = 0;
    ll prevst = -1;
    while (i<evs.size()){
        ll curt= evs[i].first;
        ll curty = evs[i].second;
        while (i<evs.size() && evs[i].first==curt && evs[i].second==curty){
            if (evs[i].second){
                //cout << "start " << curt << endl;
                curis++;
            } else {
                //cout << "end " << curt << endl;
                curis--;
            }
            i++;
        }
        if (curis == 0){
            ans += curt-prevst+1;
            prevst=-1;
        } else if (prevst==-1){
            prevst=curt;
        }
        //cout << curis << " " << prevst << " " << ans << endl;
    }
    cout << ans << endl;
}

signed main() {
    fast;
    int t=1;
    while (t--) solve();
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...