Submission #1257586

#TimeUsernameProblemLanguageResultExecution timeMemory
1257586MasterDebaterStrange Device (APIO19_strange_device)C++20
100 / 100
352 ms41336 KiB
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pii pair<ll,ll>
#define F first
#define S second
const int N=1e6+10;
ll n,a,b,k,ans,li,ri,l[N],r[N];
vector<pii>v;
bool overflow(ll x,ll y){
	if(log10(x)+log10(y)>=log10(4e18))return 1;
	return 0;
}
bool cmp(pii a,pii b){
	if(a.F!=b.F)return a.F<b.F;
	return a.S>b.S;
}
int main(){
	ios_base::sync_with_stdio(false);
	cin.tie(0);
	cin>>n>>a>>b;
	for(int i=0;i<n;i++)cin>>l[i]>>r[i];
	if(overflow(a,(b+1)/(__gcd(a,b+1))))k=2e18;
	else k=a*(b+1)/__gcd(a,b+1),k/=(b+1),k*=b;
	//cout<<"k: "<<k<<'\n';
	if(k>=1e18){
		for(int i=0;i<n;i++)ans+=(r[i]-l[i]+1);
		cout<<ans;
		return 0;
	}
	for(int i=0;i<n;i++)if(r[i]-l[i]+1>=k){
		cout<<k;
		return 0;
	}
	for(int i=0;i<n;i++){
		l[i]%=k;
		r[i]%=k;
		if(r[i]<l[i])v.push_back({l[i],k-1}),v.push_back({0,r[i]});
		else v.push_back({l[i],r[i]});
	}
	li=-1,ri=-2;
	sort(v.begin(),v.end(),cmp);
	for(int i=0;i<v.size();i++){
		if(v[i].F>ri)ans+=(ri-li+1),li=v[i].F,ri=v[i].S;
		else if(v[i].S>ri)ri=v[i].S;
	}
	ans+=(ri-li+1);
	cout<<ans;
	return 0;
}
#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...