Submission #1067612

#TimeUsernameProblemLanguageResultExecution timeMemory
1067612DeathIsAwe이상한 기계 (APIO19_strange_device)C++17
100 / 100
1043 ms71752 KiB
#include <bits/stdc++.h>
using namespace std;
#define ll long long

int main() {
    ll n, a, b; cin >> n >> a >> b;
    vector<pair<ll,ll>> turnedon(n);
    __int128_t divisor = (__int128_t)gcd(a, b + 1);
    __int128_t multiple = ((__int128_t)a * (__int128_t)(b + 1)) / divisor;
    __int128_t num = multiple - (__int128_t)(multiple / (__int128_t)(b + 1));
    for (int i=0;i<n;i++) {
        cin >> turnedon[i].first >> turnedon[i].second;
    }
    ll limit;
    if (num > 1000000000000000000) {
        limit = 1000000000000000001;
    } else {
        limit = num;
    }


    vector<pair<ll,ll>> ansarr;
    for (int i=0;i<n;i++) {
        if (turnedon[i].second - turnedon[i].first + 1 >= limit) {
            cout << limit;
            return 0;
        }
        turnedon[i].first %= limit; turnedon[i].second %= limit;
        if (turnedon[i].first > turnedon[i].second) {
            ansarr.push_back(make_pair(turnedon[i].first, limit - 1));
            ansarr.push_back(make_pair(0, turnedon[i].second));
        } else {
            ansarr.push_back(make_pair(turnedon[i].first, turnedon[i].second));
        }
    }
    sort(ansarr.begin(), ansarr.end());
    ll ans = 0, tracker = -1;
    for (pair<ll,ll> j: ansarr) {
        if (tracker < j.first) {
            ans += j.second - j.first + 1;
            tracker = j.second;
        } else if (tracker < j.second) {
            ans += j.second - tracker;
            tracker = j.second;
        }
    }
    cout << ans;
}
#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...