Submission #797354

#TimeUsernameProblemLanguageResultExecution timeMemory
797354tch1cherinA Difficult(y) Choice (BOI21_books)C++17
100 / 100
1 ms336 KiB
#include <bits/stdc++.h> #include "books.h" using namespace std; // // --- Sample implementation for the task books --- // // To compile this program with the sample grader, place: // books.h books_sample.cpp sample_grader.cpp // in a single folder and run: // g++ books_sample.cpp sample_grader.cpp // in this folder. // map<int, long long> m; long long skim_and_check(int x) { if (m.count(x)) { return m[x]; } else { return m[x] = skim(x); } } void answer_and_sort(vector<int> v) { sort(v.begin(), v.end()); answer(v); } void solve(int N, int K, long long A, int S) { m = map<int, long long>(); int l = 0, r = N + 1; while (r > l + 1) { int mid = (l + r) / 2; if (skim_and_check(mid) < A) { l = mid; } else { r = mid; } } if (l < K) { long long sum = 0; vector<int> ans; for (int i = 1; i <= K; i++) { sum += skim_and_check(i); ans.push_back(i); } if (sum >= A && sum <= 2 * A) { answer_and_sort(ans); } else { impossible(); } return; } vector<int> ans; vector<long long> vals; long long sum = 0; for (int i = l; i > l - K; i--) { vals.push_back(skim_and_check(i)); ans.push_back(i); sum += vals.back(); } if (sum < A) { if (r == N + 1) { impossible(); return; } sum = skim_and_check(r); ans = vector<int>(); ans.push_back(r); for (int i = 1; i <= K - 1; i++) { ans.push_back(i); sum += skim_and_check(i); } if (sum <= 2 * A) { answer_and_sort(ans); } else { impossible(); } } else { if (sum <= 2 * A) { answer_and_sort(ans); return; } vector<int> add; for (int i = 1; i <= K; i++) { sum += skim_and_check(i) - vals.back(); vals.pop_back(); ans.pop_back(); add.push_back(i); if (sum <= 2 * A) { break; } } if (sum > 2 * A) { impossible(); return; } vector<int> new_ans; for (int v : add) { new_ans.push_back(v); } for (int v : ans) { new_ans.push_back(v); } answer_and_sort(new_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...