Submission #1000966

#TimeUsernameProblemLanguageResultExecution timeMemory
1000966MarwenElarbiA Difficult(y) Choice (BOI21_books)C++17
0 / 100
1 ms344 KiB
#include <bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define ll long long
#define pb push_back
#define ii pair<int,int>
const int nax=2e5+5;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

long long skim(int);

void answer(std::vector<int>);

void impossible();

void solve(int N, int K, long long A, int S){
    int cnt=40;
    ll sum=0;
    vector<int> tab;
    vector<ll> a;
    vector<pair<ll,int>> v;
    for (int i = 1; i <= K; ++i)
    {
        cnt--;
        tab.pb(i);
        a.pb(skim(i));
        v.pb({a.back(),i});
        sum+=a.back();
    }
    int mn=a[0];
    int l=K;
    int r=N+1;
    ll q;
    int mid;
    while(r-l>1){
        cnt--;
        mid=(r+l)/2;
        q=skim(mid);
        if(q>=A-sum+mn) r=mid;
        else l=mid;
    }
    if(r==N+1||q>2*A-sum+a.back()){
        for (int i = l; cnt-- && i > K && v.size() < 20; --i)
        {
            v.pb({skim(i),i});
        }
        sort(v.begin(),v.end());
        for (int i = 0; i < (1<<v.size()); ++i)
        {
            if(__builtin_popcount(i)!=K) continue;
            ll nab=0;
            for (int j = 0; j < v.size(); ++j)
            {
                if(i&(1<<j)) nab+=v[j].fi;
            }
            if(A<=nab&&nab<=2*A){
                tab.clear();
                for (int j = 0; j < v.size(); ++j)
                {
                    if(i&(1<<j)) tab.pb(v[j].se);
                }
                sort(tab.begin(),tab.end());
                answer(tab);
                return;
            }
        }
        impossible();
    }else{
        if(q>2*A-sum+mn){
            tab.back()=mid;
        }else tab[0]=mid;
        sort(tab.begin(),tab.end());
        answer(tab);
        return;
    }
}

Compilation message (stderr)

books.cpp: In function 'void solve(int, int, long long int, int)':
books.cpp:53:31: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<long long int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   53 |             for (int j = 0; j < v.size(); ++j)
      |                             ~~^~~~~~~~~~
books.cpp:59:35: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<long long int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   59 |                 for (int j = 0; j < v.size(); ++j)
      |                                 ~~^~~~~~~~~~
#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...