Submission #1150431

#TimeUsernameProblemLanguageResultExecution timeMemory
1150431Math4Life2020이상한 기계 (APIO19_strange_device)C++20
100 / 100
588 ms66384 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = __int128; using pii = pair<ll,ll>;

int main() {
	ios_base::sync_with_stdio(false); cin.tie(0);
    long long N1,A1,B1; cin >> N1 >> A1 >> B1;
    ll N=N1,A=A1,B=B1;
    ll P = A*B/gcd(A1,B1+1);
    //if A = B+1:  augment t by B -> augment x by (B+1)%A=0
    //increase by B+1 -> period in A: A/gcd(A,B+1)
    vector<pii> upd; //{x,+1} or {x,-1}
    for (ll i=0;i<N1;i++) {
        long long l1,r1; cin >> l1 >> r1;
        ll l=l1,r=r1;
        r++;
        ll D = l/P;
        l -= P*D;
        r -= P*D;
        if (r>=(2*P)) {
            cout << (long long)P << "\n"; exit(0);
        } else if (r>=P) {
            upd.push_back({l,1});
            upd.push_back({P,-1});
            upd.push_back({0,1});
            upd.push_back({r-P,-1});
        } else {
            upd.push_back({l,1});
            upd.push_back({r,-1});
        }
    }
    sort(upd.begin(),upd.end());
    ll cx = 0; ll nact = 0; ll ans = 0;
    for (pii p0: upd) {
        ll x = p0.first; 
        if (nact>0) {
            ans += (x-cx);
        }
        nact += p0.second;
        cx = x;
    }
    cout << (long long)ans <<"\n";
}
#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...