Submission #1354149

#TimeUsernameProblemLanguageResultExecution timeMemory
1354149takoshanavaA Difficult(y) Choice (BOI21_books)C++20
100 / 100
0 ms412 KiB
#include <bits/stdc++.h>
#include "books.h"
//#define int long long
#define ll long long
#define pb push_back
#define fs first
#define sc second
using namespace std;

void solve(int n, int k, long long a, int s){
    vector<pair<ll,int>> vec; 
    ll sum = 0;

    for(int i = 1; i <= k; i++){
        ll v = skim(i);
        vec.pb({v, i});
        sum += v;
    }

    if(sum > 2 * a){
        impossible();
        return;
    }

    if(sum >= a){
        vector<int> res;
        for(auto x : vec) res.pb(x.sc);
        answer(res);
        return;
    }
    int l = 1, r = n, pos = n + 1;
    while(l <= r){
        int mid = (l + r) / 2;
        ll v = skim(mid);
        if(v >= a) pos = mid, r = mid - 1;
        else l = mid + 1;
    }

    vector<pair<ll,int>> vec1 = vec;

    for(int i = max(k + 1, pos - k); i < pos; i++){
        if(i <= k) continue;
        ll v = skim(i);
        vec1.pb({v, i});
    }

    int m = vec1.size();
    for(int i = 0; i + k <= m; i++){
        ll s2 = 0;
        vector<int> res;
        for(int j = i; j < i + k; j++){
            s2 += vec1[j].fs;
            res.pb(vec1[j].sc);
        }
        if(s2 >= a and s2 <= 2 * a){
            answer(res);
            return;
        }
    }

    if(pos != n + 1){
        ll s2 = 0;
        vector<int> res;

        for(int i = 0; i < k - 1; i++){
            s2 += vec[i].fs;
            res.pb(vec[i].sc);
        }
        ll v = skim(pos);
        s2 += v;
        res.pb(pos);
        if(s2 >= a && s2 <= 2 * a){
            answer(res);
            return;
        }
    }

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