제출 #1242760

#제출 시각아이디문제언어결과실행 시간메모리
1242760andrewgopher이상한 기계 (APIO19_strange_device)C++20
100 / 100
579 ms66244 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=__int128;

__int128 read() {
    __int128 x = 0, f = 1;
    char ch = getchar();
    while (ch < '0' || ch > '9') {
        if (ch == '-') f = -1;
        ch = getchar();
    }
    while (ch >= '0' && ch <= '9') {
        x = x * 10 + ch - '0';
        ch = getchar();
    }
    return x * f;
}

void print(__int128 x) {
    if (x < 0) {
        putchar('-');
        x = -x;
    }
    if (x > 9) print(x / 10);
    putchar(x % 10 + '0');
}

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

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

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

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

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

            evs.push_back({r%m,true});
        }
    }
    if (ans!=-1){
        print(ans);
        return;
    }

    ans=0;

    sort(evs.begin(),evs.end());
    int i=0;
    int curis = 0;
    ll prevst = -1;
    while (i<evs.size()){
        ll curt= evs[i].first;
        bool 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;
    }
    print(ans);
    //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...