제출 #1367173

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

using ll = long long;
using pll = pair<long long, long long>;
ll inf = 2e18;

const int N = 1e6 + 10;
ll n, a, b, l[N], r[N];
vector<ll> vec[N];

ll gcd(ll a, ll b) {
    if (b == 0) return a;
    return gcd(b, a % b);
}

ll calcMod() {
    ll loop = a / gcd(a, b + 1);
    ll mxMul = inf / loop;
    if (b >= mxMul) return inf;
    return loop * b;
}

vector<pll> sweep;

void add_interval(ll a, ll b) {
    sweep.push_back({a, 1});
    sweep.push_back({b + 1, -1});
}

int main() {
    cin.tie(nullptr)->ios_base::sync_with_stdio(false);
    cin >> n >> a >> b;
    ll m = calcMod();
    for (int i = 1; i <= n; i++) {
        cin >> l[i] >> r[i];
        ll sz = r[i] - l[i] + 1;
        if (sz >= m) {
            cout << m;
            return 0;
        }
        l[i] %= m, r[i] %= m;
        if (l[i] <= r[i]) {
            add_interval(l[i], r[i]);
        }
        else {
            add_interval(l[i], m - 1);
            add_interval(0, r[i]);
        }
    }
    sort(sweep.begin(), sweep.end());
    ll ans = 0;
    ll start = -1;
    ll total = 0;
    for (auto [i, val] : sweep) {
        if (total == 0) start = i;
        total += val;
        if (total == 0) ans += i - start;
    }
    cout << ans;
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…