제출 #1368523

#제출 시각아이디문제언어결과실행 시간메모리
1368523kahoulA Difficult(y) Choice (BOI21_books)C++20
45 / 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.
//

map<int, int> vals;

int get_val (int x) {
    return vals[x] = vals.count(x) ? vals[x] : skim(x + 1);
}

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

    int max_sum = 0;

    for (int i = n - k; i < n; i++) {
        get_val(i);
        max_sum += get_val(i);
    }

    if (A > max_sum || sum > 2 * A) impossible();

    int l = k - 1;
    int r = n - 1;

    while (true) {
        sum += get_val(r);
        sum -= get_val(l);
        if (sum >= A) break;
        l--;
        r--;
    }


    int a = l;
    int b = r;

    int base = sum - get_val(r);

    while (a < b) {
        int m = (a + b) / 2;
        int cur = base + get_val(m);

        if (cur >= A) b = m;
        else a = m + 1;
    }

    vector<signed> ans;

    for (int i = 0; i < l; i++) {
        ans.push_back(i + 1);
    }

    for (int i = r + 1; i < n; i++) {
        ans.push_back(i + 1);
    }

    ans.push_back(a + 1);

    answer(ans);
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…