Submission #240095

#TimeUsernameProblemLanguageResultExecution timeMemory
240095neihcr7j이상한 기계 (APIO19_strange_device)C++14
35 / 100
2356 ms53400 KiB
#include<bits/stdc++.h>
#define maxn 1000005

using namespace std;
typedef long long ll;

ll n, A, B;
ll l[maxn], r[maxn];
ll ret = 0;
int main(){
   // BASIC BASE

    cin >> n >> A >> B;
    for (ll i = 0; i < n; ++i)
        cin >> l[i] >> r[i];

    ll ret = A / __gcd(A, B + 1);
    if (sqrt(ret) * sqrt(B) > 1e9){
        ll ans = 0;
        for (ll i = 0; i < n; ++i)
            ans += r[i] - l[i];
        cout << ans;
        return 0;
    }
    ret *= B;
    ll ans = 0;
    for (ll i = 0; i < n; ++i)
        if (l[i] + ret <= r[i]) return cout << ret, 0;
        else l[i] %= ret, r[i] %= ret;

    vector < pair <ll, ll> > a;
    ll L = 0, R = ret;
    for (ll i = 0; i < n; ++i)
        if (l[i] > r[i]) L = max(L, r[i] + 1), R = min(R, l[i]);
        else a.push_back({l[i], r[i]});

    if (L > R) return cout << ret, 0;
    sort(a.begin(), a.end());
    ans = ret;
    for (auto i : a){
        if (i.first >= L) ans -= min(R, i.first) - L;
        L = max(L, min(R, i.second + 1));
    }

    ans -= R - L;
    cout << ans;
    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...