Submission #205869

#TimeUsernameProblemLanguageResultExecution timeMemory
205869mraronStrange Device (APIO19_strange_device)C++14
100 / 100
660 ms36060 KiB
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	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 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...