Submission #950659

#TimeUsernameProblemLanguageResultExecution timeMemory
950659PringA Difficult(y) Choice (BOI21_books)C++17
100 / 100
1 ms600 KiB
#include <bits/stdc++.h> #include "books.h" using namespace std; #define fs first #define sc second #define mp make_pair #define FOR(i, j, k) for (int i = j, Z = k; i < Z; i++) typedef pair<int, int> pii; using ll = long long; namespace { const int MXN = 10; int n, k, s; ll a; int b; vector<int> v; ll l[MXN], r[MXN]; int BSH(int l, int r, ll b) { while (l + 1 < r) { int mid = (l + r) >> 1; (skim(mid) >= b ? r : l) = mid; } return r; } void SOLVE() { b = BSH(0, n + 1, a); // if (b < k) { // impossible(); // return; // } FOR(i, 0, k) l[i] = skim(i + 1); { ll acc = 0; FOR(i, 0, k) acc += l[i]; if (acc > 2 * a) { impossible(); return; } if (acc >= a) { FOR(i, 1, k + 1) v.push_back(i); answer(v); return; } } if (b != n + 1) { ll c = skim(b); ll acc = 0; FOR(i, 0, k - 1) acc += l[i]; acc += c; if (acc <= 2 * a) { FOR(i, 1, k) v.push_back(i); v.push_back(b); answer(v); return; } } if (b == k) { impossible(); return; } FOR(i, 0, k) r[i] = skim(b - k + i); // ll acc = 0; // FOR(i, 0, k) acc += r[i]; // if (acc < a) { // impossible(); // return; // } // if (acc <= 2 * a) { // FOR(i, 0, k) v.push_back(b - k + i); // answer(v); // return; // } FOR(i, 0, k + 1) { // acc -= r[i]; // acc += l[i]; // if (acc <= 2 * a) { // FOR(j, 0, i + 1) v.push_back(j); // FOR(j, i + 1, k) v.push_back(b - k + j); // answer(v); // return; // } ll acc = 0; FOR(j, 0, i) acc += l[j]; FOR(j, i, k) acc += r[j]; if (a <= acc && acc <= 2 * a) { FOR(j, 0, i) v.push_back(j + 1); FOR(j, i, k) v.push_back(b - k + j); answer(v); return; } } impossible(); } } void solve(int n, int k, ll a, int s) { ::n = n; ::k = k; ::a = a; ::s = s; SOLVE(); }
#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...