Submission #1138048

#TimeUsernameProblemLanguageResultExecution timeMemory
1138048ConquerConquererA Difficult(y) Choice (BOI21_books)C++20
10 / 100
0 ms424 KiB
#include <bits/stdc++.h>
#include "books.h"
using namespace std;

long long value[100005], b[21];
int pos[21];

void solve(int N, int K, long long A, int S) {
    for (int i = 1; i <= K; i++)
        value[i] = skim(i);

    int low = 1, high = N, ans = N + 1;
    while (low <= high) {
        int mid = (low + high) >> 1;

        if (!value[mid]) value[mid] = skim(mid);
        if (value[mid] <= A) low = mid + 1;
            else {
                ans = mid;
                high = mid - 1;
            }
    }

    if (ans < K) {
        impossible();
        return ;
    }

    if (ans != N + 1) {
        long long total = value[ans];
        for (int i = 1; i < N; i++)
            total += value[i];
        if (total <= A + A) {
            vector<int> v;
            v.push_back(ans);
            for (int i = 1; i < N; i++)
                v.push_back(i);
            answer(v);
            return ;
        }
    }

    for (int i = 1; i <= K; i++) {
        pos[i] = i;
        b[i] = value[i];
    }

    int idx = K;
    if (K < ans - K) {
        for (int i = ans - K; i < ans; i++) {
            if (!value[i]) value[i] = skim(i);
            b[++idx] = value[i];
            pos[idx] = i;
        }
    }
    else  {
        idx = ans - 1;
        for (int i = 11; i < ans; i++) {
            if (!value[i]) value[i] = skim(i);
            b[i] = value[i];
            pos[i] = i;
        }
    }

    for (int i = K; i <= idx; i++) {
        long long total = 0;
        for (int j = i - K + 1; j <= i; j++)
            total += b[j];
        if (A <= total && total <= A + A) {
            vector<int> v;
            for (int j = i - K + 1; j <= i; j++)
                v.push_back(pos[j]);
            answer(v);
            return ;
        }
    }

    impossible();
}
#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...