Submission #1044709

#TimeUsernameProblemLanguageResultExecution timeMemory
1044709vjudge1Strange Device (APIO19_strange_device)C++17
100 / 100
280 ms40880 KiB
#include <bits/stdc++.h>
#define fast cin.tie(0)->sync_with_stdio(0);
#define int long long
#define inf ((int)1e18)
using namespace std;
const int C = inf;

int32_t main(){
	fast
	int n, a, b;
	cin >> n >> a >> b;
	__int128__ g = gcd(a, b + 1);
	__int128__ temp = (__int128__)a / g * b;
	if(temp > C) {
		int sum = 0;
		for(int i = 0; i < n; i++) {
			int l, r;
			cin >> l >> r;
			sum += r - l + 1;
		}
		cout << sum;
		return 0;
	}
	int tekrar = temp;
	vector <pair<int, int> > ranges;
	for(int i = 0; i < n; i++) {
		int l, r;
		cin >> l >> r;
		if(r - l + 1 >= tekrar) {
			cout << tekrar;
			return 0;
		}
		int ll = l % tekrar, rr = r % tekrar;
		if(ll <= rr) {
			ranges.push_back({ll, rr});
		}
		else {
			ranges.push_back({0, rr});
			ranges.push_back({ll, tekrar - 1});
		}
	}
	sort(ranges.begin(), ranges.end());
	int lastr = -inf, ans = 0;
	for(auto [l, r]:ranges) {
		if(l > lastr) {
			ans += r - l + 1;
		}
		else {
			ans += max(0ll, r - lastr);
		}
		lastr = max(lastr, r);
	}
	cout << ans;
}
#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...