Submission #941142

#TimeUsernameProblemLanguageResultExecution timeMemory
941142adhityamvStrange Device (APIO19_strange_device)C++17
100 / 100
1025 ms163680 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define mp make_pair
#define pii pair<int,int>
#define fi first
#define se second
const int INF=1000000000000000000;
int gcd(int a,int b){
    if(b==0 || a==0) return a+b;
    if(a<b) swap(a,b);
    return gcd(b,a%b);
}
void solve(){
    int n,a,b;
    cin >> n >> a >> b;
    int bp=a/gcd(a,b+1LL);
    int p;
    if(bp>INF/b){
        p=INF;
    } else p=(bp*b);
    vector<pii> ranges;
    for(int i=0;i<n;i++){
        int l,r;
        cin >> l >> r;
        ranges.push_back(mp(l,r));
    }
    set<int> imppts;
    imppts.insert(0);
    imppts.insert(p);
    map<int,int> cnt;
    for(auto [l,r]:ranges){
        if(r-l+1LL>=p){
            cout << p << "\n";
            return;
        }
        r%=p;
        l%=p;
        imppts.insert(l);
        imppts.insert(r+1);
        cnt[l]++;
        cnt[r+1]--;
        if(l>r){
            cnt[0]++;
            cnt[p]--;
        }
    }
    int ccnt=0;
    int prev=0;
    int ans=0;
    for(int i:imppts){
        if(ccnt>0) ans+=(i-prev);
        ccnt+=cnt[i];
        prev=i;
    }
    cout << ans;
}
signed main(){
    auto begin = std::chrono::high_resolution_clock::now();
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    int t;
    t=1;
    //cin >> t;
    while(t--) solve();
    auto end = std::chrono::high_resolution_clock::now();
    auto elapsed = std::chrono::duration_cast<std::chrono::nanoseconds>(end - begin);
}
#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...