Submission #806605

#TimeUsernameProblemLanguageResultExecution timeMemory
806605gg123_peStrange Device (APIO19_strange_device)C++14
10 / 100
1162 ms78568 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; #define f(i,a,b) for(int i = a; i < b; i++) const int N = 1e6 + 5; const ll inf = 1e18 + 5; int n; ll l[N], r[N]; ll A, B, S; void subtask_1(){ set <pair<ll,ll>> s; f(i,1,n+1){ for(ll j = l[i]; j <= r[i]; j++){ ll a, b; a = (j + j/B) % A; b = j % B; s.insert({a, b}); } } cout << s.size() << "\n"; } ll gcd(ll x, ll y){ if(x > y) swap(x, y); if(y%x == 0) return x; return gcd(y - (y/x) * x, y); } void solve(){ ll X = A / gcd(A, B+1); ll period = X * B; set <pair<ll,ll>> s; f(i,1,n+1){ ll len = r[i] - l[i] + 1; if(len >= period){ cout << period << "\n"; return; } ll x = l[i] % period; if(len > period-x){ s.insert({x, period-1}); s.insert({0, r[i]%period}); } else{ s.insert({x, r[i]%period}); } } ll ans = 0, l, r; auto it = s.begin(); l = it->first, r = it->second; for(auto p: s){ if(p == *it) continue; ll x = p.first, y = p.second; if(x <= r){ r = max(r, y); } else if(x == r+1){ r = y; } else{ ans += r - l + 1; l = x, r = y; } } ans += r - l + 1; cout << ans << "\n"; } int main(){ cin >> n >> A >> B; f(i,1,n+1){ cin >> l[i] >> r[i]; } 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...