이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main() {
ll n,a,b;
cin>>n>>a>>b;
ll len=0;
vector<pair<ll,ll>> lst(n);
for(int i=0;i<n;++i) {
cin>>lst[i].first>>lst[i].second;
len+=lst[i].second-lst[i].first+1;
}
ll div=__gcd(a,b+1);
__int128 A=a/div;
__int128 B=b;
if(A*B>__int128(1000000000000000000LL)) {
cout<<len<<"\n";
return 0;
}
ll mod=(a/div)*b;
vector<pair<ll,ll>> ivs;
for(auto i:lst) {
ll div1=i.first/mod, div2=i.second/mod;
ll mod1=i.first%mod, mod2=i.second%mod;
if(mod1<=mod2) {
if(div1<div2) {
cout<<mod<<"\n";
return 0;
}
ivs.push_back({mod1,mod2});
}else {
if(div1+1==div2) {
ivs.push_back({mod1, mod-1});
ivs.push_back({0,mod2});
}else {
cout<<mod<<"\n";
return 0;
}
}
}
sort(ivs.begin(), ivs.end());
ll last=-1;
ll ans=0;
for(auto i:ivs) {
if(last<i.second) {
ans+=i.second-max(last+1, i.first)+1;
}
last=max(last, i.second);
}
cout<<ans<<"\n";
return 0;
}
# | 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... |