제출 #171157

#제출 시각아이디문제언어결과실행 시간메모리
171157joulej이상한 기계 (APIO19_strange_device)C++17
100 / 100
987 ms69272 KiB
#include <iostream>
#include <iomanip>
#include <random>
#include <algorithm>
#include <vector>
#include <set>
#include <map>
#include <cmath>
#include <numeric>
#include <cstdlib>
#include <cstring>
#include <deque>
#include <sstream>
#include <bitset>
#include <cassert>
#include <fstream>
#include <queue>

#define len(X) ((int)(X).size())

#ifdef __LOCAL
	#define DBG(X) cout << #X << "=" << (X) << '\n';
	#define SAY(X) cout << (X) << '\n';
#else
	#define DBG(X)
	#define SAY(X)
#endif
 
using namespace std;

using ll = long long int;
using ull = unsigned long long int;
using ld  = long double;
using pii = pair<int, int>;
using pll = pair<ll, ll>;

const int INT_INF = (int)(2e9);
const ll  LL_INF  = (ll)(2e18);

const int NIL = -1;
static mt19937 _g(time(nullptr));

inline ll randint(ll a, ll b) { ll w = (_g() << 31LL) ^ _g(); return a + w % (b - a + 1); }
inline void fast_io() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); };
template<typename T> inline T sign(T x) { return T(x > 0) - T(x < 0); }
template<typename T, typename S> inline ostream& operator<<(ostream& os, const pair<T, S> p) { cout << "[" << p.first << ";" << p.second << "]"; return os; }
template<typename T> inline ostream& operator<<(ostream& os, const vector<T>& v) { for(auto el: v) cout << el << " "; return os; }
template<typename T> inline T fetch() { T ret; cin >> ret; return ret; }
template<typename T> inline vector<T> fetch_vec(int sz) { vector<T> ret(sz); for(auto& elem: ret) cin >> elem; return ret; }

ll GCD(ll x, ll y) {
	return (x == 0 ? y : GCD(y % x, x));
}

ll calc_period(ll A, ll B) {
	ll k = (A / GCD(A, B + 1));

	ld kLD = (ld)k;
	ld bLD = (ld)B;

	if(kLD * bLD >= (ld)2e18) {
		return LL_INF;
	}

	return k * B;
}

vector<pll> events;

void add(ll L, ll R) {
	assert(L <= R);

	events.emplace_back(L, +1);
	events.emplace_back(R + 1, -1);
}

void solve() {
	int n = fetch<int>();
	ll A = fetch<ll>();
	ll B = fetch<ll>();
	ll p = calc_period(A, B);
	DBG(p);

	for(int i = 0; i < n; ++i) {
		ll L = fetch<ll>();
		ll R = fetch<ll>();

		ll sz = R - L + 1;
		if(sz >= p) {
			add(0, p - 1);
		} else {
			L %= p;
			R %= p;

			if(L <= R) {
				add(L, R);
			} else {
				add(0, R);
				add(L, p - 1);
			}
		}
	}

	sort(events.begin(), events.end());
	ll answ = 0;
	ll bal = 0;

	for(int i = 0; i < len(events); ) {
		DBG(i);
		int j = i;
		while(j < len(events) && events[j].first == events[i].first) {
			bal += events[j++].second;
		}

		DBG(bal);
		if(bal > 0 && j < len(events)) {
			answ += events[j].first - events[i].first;
		}

		i = j;
	}

	cout << answ << '\n';
}

int main() {
	fast_io();
	solve();

	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...