제출 #983067

#제출 시각아이디문제언어결과실행 시간메모리
983067vjudge1이상한 기계 (APIO19_strange_device)C++17
15 / 100
456 ms127036 KiB
#include <time.h> #include <cstdlib> #include <stack> #include <numeric> #include <unordered_map> #include <unordered_set> #include <iomanip> #include <map> #include <set> #include <iterator> #include <deque> #include <queue> #include <sstream> #include <array> #include <string> #include <tuple> #include <chrono> #include <cassert> #include <cstdio> #include <cstring> #include <list> #include <iostream> #include <vector> #include <cmath> #include <algorithm> #include <bitset> #define ll long long using namespace std; ll n, A, B; ll l[1000005], r[1000005], sum = 0; set<pair<ll, ll>> st1, st2, st; int main(){ ios::sync_with_stdio(0); cin.tie(0), cout.tie(0); cin >> n >> A >> B; for(int i = 1; i <= n; i++){ cin >> l[i] >> r[i]; sum += (r[i] - l[i] + 1); } if(sum <= 1e6){ for(int i = 1; i <= n; i++){ for(ll j = l[i]; j <= r[i]; j++){ ll x = (j + j / B) % A, y = (j % B); st.insert({x, y}); } } cout << int(st.size()) << "\n"; return 0; } if(n == 1){ ll x = (l[1] + l[1] / B) % A; if(l[1] + B <= r[1]){ ll num = l[1] + B; ll y = (num + num / B) % A; if(x == y){ cout << B << "\n"; return 0; } ll d = abs(x - y); ll ans = gcd(d, A); ll rg = l[1] + ans * B - 1; cout << min(r[1], rg) - l[1] + 1 << "\n"; return 0; } else{ cout << r[1] - l[1] + 1 << "\n"; return 0; } } ll lf[n + 2], rg[n + 2]; for(int i = 1; i <= n; i++){ lf[i] = l[i]; rg[i] = min(r[i], l[i] + A - 1); st1.insert({l[i], i}); // st2.insert({rg[i], i}); } ll ans = 0, mx = 0, mn = 0; bool f = 0; while(!st1.empty()){ if(!f){ auto it = st1.begin(); mn = it->first; mx = r[it->second]; f = 1; st1.erase(st1.begin()); continue; } else{ if(st1.begin()->first <= mx){ auto it = st1.begin(); mx = max(r[it->second], mx); st1.erase(st1.begin()); continue; } else{ ll res = A; if(res % 2 == 1) res *= 2; ans += min(mx - mn + 1, res / 2 - 1); auto it = st1.begin(); mn = it->first; mx = r[it->second]; f = 1; st1.erase(st1.begin()); } } } ll res = A; if(res % 2 == 1) res *= 2; ans += min(mx - mn + 1, res / 2); cout << ans; }

컴파일 시 표준 에러 (stderr) 메시지

strange_device.cpp: In function 'int main()':
strange_device.cpp:71:8: warning: variable 'lf' set but not used [-Wunused-but-set-variable]
   71 |     ll lf[n + 2], rg[n + 2];
      |        ^~
strange_device.cpp:71:19: warning: variable 'rg' set but not used [-Wunused-but-set-variable]
   71 |     ll lf[n + 2], rg[n + 2];
      |                   ^~
#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...