Submission #1301543

#TimeUsernameProblemLanguageResultExecution timeMemory
1301543efegA Difficult(y) Choice (BOI21_books)C++20
0 / 100
2 ms1184 KiB
#include <bits/stdc++.h> #include "books.h" using namespace std; #define pb push_back #define all(v) v.begin(),v.end() using i64 = long long; template<typename T> using vec = vector<T>; vec<i64> x(1e5 + 100,-1); i64 get(int idx){ if (x[idx] != -1) return x[idx]; return x[idx] = skim(idx); } void solve(int N, int K, long long A, int S) { i64 sm = 0; for (int i = 1; i < K; i++) sm += get(i); int s = K,e = N,ans = -1; while (s <= e){ int m = (s + e) / 2; if (get(m) > A){ ans = m; e = m-1; } else { ans = m; s = m+1; } } if (sm + get(ans) > 2 * A || sm + get(ans) < A) impossible(); vec<int> ansvec(K); i64 curr = 0; deque<int> dq; for (int i = 1; i <= K; i++){ curr += get(i); dq.push_back(i); } vec<int> mx; for (int i = ans; i >= max(K+1,ans-K+1); i--){ mx.pb(i); } while (curr < A){ curr -= get(dq.front()); dq.pop_front(); curr += get(mx.back()); dq.pb(mx.back()); mx.pop_back(); if (curr >= A && curr <= 2 * A) break; } vec<int> vecans; for (auto x : dq) vecans.pb(x); answer(vecans); }
#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...