제출 #1342443

#제출 시각아이디문제언어결과실행 시간메모리
1342443kawhiet이상한 기계 (APIO19_strange_device)C++20
100 / 100
345 ms39812 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long

signed main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int n, a, b;
    cin >> n >> a >> b;
    int sum = 0;
    vector<int> l(n), r(n);
    for (int i = 0; i < n; i++) {
        cin >> l[i] >> r[i];
        sum += r[i] - l[i] + 1;
    }
    int g = gcd(a, b + 1);
    if (__int128(a) * b / g > r[n - 1]) {
        cout << sum << '\n';
        return 0;
    }
    int k = a / g * b;
    for (int i = 0; i < n; i++) {
        if (r[i] - l[i] + 1 > k) {
            cout << k << '\n';
            return 0;
        }
    }
    for (int i = 0; i < n; i++) {
        l[i] %= k;
        r[i] %= k;
    }
    vector<int> x, y;
    for (int i = 0; i < n; i++) {
        if (l[i] <= r[i]) {
            x.push_back(l[i]); y.push_back(r[i]);
        } else {
            x.push_back(l[i]); y.push_back(k - 1);
            x.push_back(0); y.push_back(r[i]);
        }
    }
    int sz = x.size();
    vector<int> ord(sz);
    iota(ord.begin(), ord.end(), 0);
    ranges::sort(ord, [&](int i, int j) {
        return x[i] < x[j];
    });
    int mx = -1, ans = 0;
    for (auto i : ord) {
        if (x[i] <= mx) {
            ans += max(0LL, y[i] - mx);
            mx = max(mx, y[i]);
        } else {
            ans += y[i] - x[i] + 1;
            mx = y[i];
        }
    }
    cout << ans << '\n';
    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...