Submission #1155588

#TimeUsernameProblemLanguageResultExecution timeMemory
1155588vladiliusA Difficult(y) Choice (BOI21_books)C++20
100 / 100
0 ms408 KiB
#include <bits/stdc++.h>
#include "books.h"
using namespace std;
using ll = long long;
using pii = pair<int, int>;
#define pb push_back
#define ff first
#define ss second

void solve(int n, int k, ll A, int S){
    int l = 1, r = n + 1;
    while (l + 1 < r){
        int m = (l + r) / 2;
        if (skim(m) >= A){
            r = m;
        }
        else {
            l = m + 1;
        }
    }
    
    if (l != r && skim(l) >= A) r = l;
    
    if (r < k){
        impossible();
        return;
    }
    
    vector<ll> f = {0};
    for (int i = 1; i <= k; i++) f.pb(skim(i));
    
    if (r != (n + 1)){
        ll sum = skim(r);
        for (int i = 1; i < k; i++){
            sum += f[i];
        }
        if (A <= sum && sum <= 2 * A){
            vector<int> out = {r};
            for (int i = 1; i < k; i++){
                out.pb(i);
            }
            answer(out);
            return;
        }
    }
    
    if (r == k){
        impossible();
        return;
    }
    
    vector<ll> g = {0};
    for (int i = r - 1; i >= r - k; i--) g.pb(skim(i));
    
    for (int i = 0; i <= k; i++){
        ll sum = 0;
        for (int j = 1; j <= i; j++){
            sum += f[j];
        }
        for (int j = 1; j <= (k - i); j++){
            sum += g[j];
        }
        if (A <= sum && sum <= 2 * A){
            vector<int> out;
            for (int j = 1; j <= i; j++){
                out.pb(j);
            }
            for (int j = 1; j <= k - i; j++){
                out.pb(r - j);
            }
            answer(out);
            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...