# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
344180 | 2021-01-05T08:35:37 Z | blue | 이상한 기계 (APIO19_strange_device) | C++11 | 0 ms | 0 KB |
#include <iostream> #include <vector> using namespace std; long long long_gcd(long long a, long long b) { // cout << "gcd " << a << ' ' << b << '\n'; if(a == b) return a; if(a < b) swap(a, b); if(b == 0) return a; return long_gcd(a%b, b); } long long long_abs(long long x) { if(x >= 0) return x; return -x; } long long long_sign(long long x) { if(x > 0) return 1; return -1; } int main() { int n; long long A, B; cin >> n >> A >> B; long long period = A * B / long_gcd(A, B+1); // cout << period << '\n'; long long l, r; vector<long long> endpoints; for(int i = 1; i <= n; i++) { cin >> l >> r; if(l % period <= r % period) { endpoints.push_back(l % period + 1); endpoints.push_back(-(r % period) - 1 - 1); } else { endpoints.push_back(l % period + 1); endpoints.push_back(-period - 1); endpoints.push_back(0 + 1); endpoints.push_back(-(r % period) - 1 - 1); } } // for(long long e: endpoints) cout << e << ' '; // cout << '\n'; sort(endpoints.begin(), endpoints.end(), [] (long long p, long long q) { return long_abs(p) < long_abs(q); }); // for(long long e: endpoints) cout << e << ' '; // cout << '\n'; long long res = 0; long long count = 0; count += long_sign(endpoints[0]); for(int i = 1; i < endpoints.size(); i++) { // cout << count << ' ' << long_abs(endpoints[i]) - long_abs(endpoints[i-1]) << '\n'; if(count > 0) res += long_abs(endpoints[i]) - long_abs(endpoints[i-1]); count += long_sign(endpoints[i]); } cout << res << '\n'; }