Submission #1236631

#TimeUsernameProblemLanguageResultExecution timeMemory
1236631Double_SlashA Difficult(y) Choice (BOI21_books)C++20
100 / 100
1 ms408 KiB
#include "books.h" #include <bits/stdc++.h> using namespace std; using ll = long long; #define all(x) x.begin(), x.end() void solve(int N, int K, ll A, int) { int i = N; for (int k = 17; k--;) { if ((1 << k) >= i) continue; if (skim(i - (1 << k)) >= A) i -= 1 << k; } vector<pair<int, ll>> v; for (int j = i; j >= max(1, i - K); --j) v.emplace_back(j, skim(j)); ll sum = 0; for (int j = 0; ++j <= K;) { v.emplace_back(j, skim(j)); sum += v.back().second; } if (sum > (A << 1)) impossible(); sort(all(v)); v.erase(unique(all(v)), v.end()); vector<int> ans; auto check = [&] (int l, int r) { if (sum >= A) { for (int j = l; j <= r; ++j) ans.emplace_back(v[j].first); answer(ans); } }; check(0, K - 1); for (int i = K; i < v.size(); ++i) { sum += v[i].second - v[i - K].second; if (sum > (A << 1)) break; check(i - K + 1, i); } if (K == 1) impossible(); sum = v.back().second; ans = {v.back().first}; for (int i = K - 1; i--;) sum += v[i].second; if (sum > (A << 1)) impossible(); check(0, K - 2); for (int i = K - 1; i < v.size() - 1; ++i) { sum += v[i].second - v[i - K + 1].second; if (sum > (A << 1)) impossible(); check(i - K + 2, i); } impossible(); }
#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...