This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |