제출 #519328

#제출 시각아이디문제언어결과실행 시간메모리
519328tibinyte이상한 기계 (APIO19_strange_device)C++14
100 / 100
771 ms64708 KiB
#include <bits/stdc++.h> using namespace std; bool will_overflow(long long a, long long b) { long long c = a * b; if (a != c / b) { return true; } return false; } long long gcd(long long a, long long b) { while (b) { long long c = a % b; a = b; b = c; } return a; } int main() { cin.tie(nullptr)->ios_base::sync_with_stdio(false); long long n, a, b; cin >> n >> a >> b; long long p = 0; if (log10((double)a / (double)gcd(b + 1, a)) + log10(b) >= 18) { p = 1e18 + 1; } else { p = a / gcd(a, b + 1) * b; } map<long long, long long> wh; auto update = [&](long long st, long long dr) { wh[st]++; wh[dr + 1]--; }; wh[p - 1] = 0; wh[0] = 0; for (long long i = 1; i <= n; ++i) { long long st, dr; cin >> st >> dr; long long lg = (dr - st) + 1; st %= p; if (st + lg - 1 < p) { update(st, st + lg - 1); } else { update(st, p - 1); lg -= (p - st); st = 0; if (st + lg - 1 < p) { update(st, st + lg - 1); } else { cout << p << '\n'; return 0; } } } long long ans = 0; long long s = 0; for (map<long long, long long>::iterator i = wh.begin(); i != prev(wh.end()); ++i) { s += i->second; long long st = i->first, dr = next(i)->first - 1; if (s) { ans += dr - st + 1; } } 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...