Submission #1368538

#TimeUsernameProblemLanguageResultExecution timeMemory
1368538kahoulA Difficult(y) Choice (BOI21_books)C++20
0 / 100
0 ms420 KiB
#include <bits/stdc++.h>

#include "books.h"

#define int long long
using namespace std;
//
// --- Sample implementation for the task books ---
//
// To compile this program with the sample grader, place:
//     books.h books.cpp grader.cpp
// in a single folder and run:
//     g++ books.cpp grader.cpp
// in this folder.
//

int N;

map<int, int> vals;
int get (int x) {
    if (x == N) return 1e18;
    return vals[x] = (vals.count(x) ? vals[x] : skim(x + 1));
}

void solve(signed n, signed k, long long A, signed s) {
    N = n;
    int min_sum = 0;
    for (int i = 0; i < k; i++) {
        min_sum += get(i);
    }

    if (min_sum > 2 * A) {
        impossible();
        return;
    }

    int l = 0, r = n;
    while (l < r) {
        int m = (l + r) / 2;
        if (get(m) >= A) r = m;
        else l = m + 1;
    }

    int max_sum = 0;
    for (int i = l - 1; i >= l - k; i--) {
        max_sum += get(i);
    }

    if (max_sum < A) {
        impossible();
        return;
    }

    if (min_sum - get(k - 1) + get(l) <= 2 * A) {
        vector<signed> ans;
        for (int i = 0; i < k - 1; i++) {
            ans.push_back(i + 1);
        }
        ans.push_back(l);
        answer(ans);
        return;
    }

    int a = k - 1, b = l - 1;

    while (a < b) {
        min_sum += get(b);
        min_sum -= get(a);
        if (min_sum >= A) break;
        a--;
        b--;
    }

    vector<signed> ans;

    for (int i = 0; i < a; i++) ans.push_back(i + 1);
    for (int i = b; i < n; i++) ans.push_back(i + 1);

    answer(ans);
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...