제출 #646244

#제출 시각아이디문제언어결과실행 시간메모리
646244alextodoranA Difficult(y) Choice (BOI21_books)C++17
45 / 100
49 ms336 KiB
/**
 ____ ____ ____ ____ ____
||a |||t |||o |||d |||o ||
||__|||__|||__|||__|||__||
|/__\|/__\|/__\|/__\|/__\|

**/

#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

ll skim (int i);
void answer (vector <int> v);
void impossible ();

void solve (int N, int K, ll A, int S) {
    int l = 1, r = N + 1;
    while (l < r) {
        int mid = (l + r) / 2;
        if (skim(mid) * K >= A) {
            r = mid;
        } else {
            l = mid + 1;
        }
    }
    vector <pair <int, ll>> v;
    for (int i = max(1, l - K); i <= min(N, l + K - 1); i++) {
        v.push_back(make_pair(i, skim(i)));
    }
    for (int mask = 0; mask < (1 << (int) v.size()); mask++) {
        ll sum = 0;
        vector <int> w;
        for (int i = 0; i < (int) v.size(); i++) {
            if ((mask >> i) & 1) {
                w.push_back(v[i].first);
                sum += v[i].second;
            }
        }
        if ((int) w.size() == K && A <= sum && sum <= A * 2) {
            answer(w);
            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...