Submission #1346205

#TimeUsernameProblemLanguageResultExecution timeMemory
1346205rahidilbayramliA Difficult(y) Choice (BOI21_books)C++20
100 / 100
52 ms1180 KiB
#include<bits/stdc++.h>
#include "books.h"
#define ll long long
#define ld long double
#define vl vector<ll>
#define vi vector<int>
#define pb push_back
#define sz(v) (ll)(v.size())
#define f first
#define s second
#define pll pair<ll, ll>
#define pii pair<int, int>
#define all(v) v.begin(), v.end()
#define rall(v) v.rbegin(), v.rend()
using namespace std;
const ll sz = 1e5+5;
ll a[sz];
ll ask(ll v)
{
    if(a[v])
        return a[v];
    return a[v] = skim(v);
}
void solve(int N, int K, long long A, int S)
{
    for(int i = 1; i <= N; i++)
        a[i] = 0;
    int l = 1, r = N, bst = N+1;
    while(l <= r)
    {
        int mid = (l + r) / 2;
        if(ask(mid) >= A)
        {
            bst = mid;
            r = mid - 1;
        }
        else
            l = mid + 1;
    }
    if(bst < K)
    {
        impossible();
        return;
    }
    if(bst <= N)
    {
        ll sm = 0;
        for(ll i = 1; i <= K - 1; i++)
            sm += ask(i);
        sm += ask(bst);
        if(A <= sm && sm <= 2 * A)
        {
            vi v;
            for(ll i = 1; i <= K - 1; i++)
                v.pb(i);
            v.pb(bst);
            answer(v);
            return;
        }
    }
    set<ll>st;
    for(ll i = 1; i <= K; i++)
        st.insert(i);
    for(ll i = bst - K; i <= bst-1; i++)
        st.insert(i);
    vl v;
    for(auto u : st)
        v.pb(u);
    for(ll i = 0; i < (1 << sz(v)); i++)
    {
        ll sm = 0, cnt = 0;
        for(ll j = 0; j < sz(v); j++)
        {
            if((i >> j) & 1)
                sm += ask(v[j]), cnt++;
        }
        if(sm >= A && sm <= 2 * A && cnt == K)
        {
            vi res;
            for(ll j = 0; j < sz(v); j++)
            {
                if((i >> j) & 1)
                    res.pb(v[j]);
            }
            answer(res);
            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...