# | Submission time | Handle | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
683667 | 2023-01-19T05:13:14 Z | Nursik | Strange Device (APIO19_strange_device) | C++14 | 0 ms | 0 KB |
#include <stdio.h> #include <algorithm> #include <bitset> #include <cassert> #include <cmath> #include <cstdio> #include <cstdlib> #include <cstring> #include <ctime> #include <deque> #include <fstream> #include <functional> #include <iomanip> #include <iostream> #include <list> #include <map> #include <queue> #include <random> #include <set> #include <sstream> #include <stack> #include <string> #include <unordered_map> #include <unordered_set> #include <vector> using namespace std; #define ll long long #define pb push_back #define mp make_pair #define f first #define s second #define ld long double #define bug cout << "bug\n"; const ll maxn = 1e6 + 5, maxm = 2e2 + 1; const ll mod = 1e9 + 7, inf = 1e9, block = 550, hb = 126067, base = 1000050017, biginf = 5e18; const ld eps = 1e-15; using namespace std; int n; ll a, b; ll l[maxn], r[maxn]; int main(){ ios_base::sync_with_stdio(false); cin.tie(0), cout.tie(0); cin >> n >> a >> b; ll p = a * b / gcd(a, b + 1); vector<pair<ll, ll>> v; for (int i = 1; i <= n; ++i){ cin >> l[i] >> r[i]; ll x = l[i] % p; ll y = r[i] % p; if (x <= y){ v.pb(mp(x, y)); } else{ v.pb(mp(x, p - 1)); v.pb(mp(0, y)); } } sort(v.begin(), v.end()); ll ans = 0, nxt = -1; for (auto it : v){ ll lf = it.f, rg = it.s; if (nxt < lf){ ans += rg - lf + 1; nxt = rg; } else if (nxt <= rg){ ans += rg - nxt; nxt = rg; } } cout << ans; }