Submission #967697

# Submission time Handle Problem Language Result Execution time Memory
967697 2024-04-22T16:16:20 Z qwusha A Difficult(y) Choice (BOI21_books) C++17
Compilation error
0 ms 0 KB
#include <bits/stdc++.h>
//#include "books.h"
using namespace std;
typedef long long ll;
#define fi first
#define se second
typedef long double ld;
const ll mod = 1e18 + 7;
const ld eps = 1e-8;
mt19937 rnd(chrono::high_resolution_clock::now().time_since_epoch().count());
const ll inf = 1e18;

/*
ll skim (ll v) {
    cout << v << endl;
    ll x;
    cin >> x;
    return x;
}


void answer(vector<ll> a) {
    for (ll i = 0; i < a.size(); i++) {
        cout << a[i] << ' ';
    }
    exit(0);
}



void impossible() {
    cout << "imp" << '\n';
    exit(0);
}*/

void answerik(set<ll> indi) {
    vector<ll> res;
    for (auto j : indi)
        res.push_back(j);
    answer(res);
}


void solve(ll n, ll k, ll A, ll S) {
    ll l = 0, r = n + 1;
    vector<ll> known(n + 1, -1);
    while (r - l > 1) {
        ll m = (l + r) / 2;
        ll x = skim(m);
        known[m] = x;
        if (x < A / k) {
            l = m;
        } else
            r = m;
    }
    if (r == n + 1) {
        impossible();
    }
    set<ll> ind = {r};
    ll cnt = 1;
    ll curi = r;
    while (cnt < (k + 1) / 2 && curi < n) {
        curi++;
        if (known[curi] == -1) {
            ll x = skim(curi);
            known[curi] = x;
        }
        if (known[curi] > A * 2)
            break;
        cnt++;
        ind.insert(curi);
    }
    ll right = curi;
    curi = r;
    while (cnt < k && curi > 1) {
        curi--;
        if (known[curi] == -1) {
            ll x = skim(curi);
            known[curi] = x;
        }
        if (known[curi] > A * 2)
            break;
        cnt++;
        ind.insert(curi);
    }
    ll left = curi;
    if (cnt < k) {
        impossible();
    }
    ll sum = 0;
    vector<bool> taken(n + 1);
    for (ll i : ind) {
        sum += known[i];
        taken[i] = 1;
    }
    bool ok = 0;
    while (!ok) {
        if (A <= sum && sum <= 2 * A) {
            answerik(ind);
        }
        left = *ind.begin();
        auto t = ind.end();
        t--;
        right = *t;
        if (sum > 2 * A) {
            ll maxi = 0;
            pair<ll, ll> pm;
            for (ll i = max(1, left - 1); i < right; i++) {
                if (known[i] == -1) {
                    ll x = skim(i);
                    known[i] = x;
                }
                if (taken[i])
                    continue;
                for (ll j : ind) {
                    if (sum - known[j] + known[i] >= A && sum - known[j] + known[i] <= 2 * A) {
                        sum += known[i] - known[j];
                        taken[j] = 0;
                        taken[i] = 1;
                        ind.insert(i);
                        ind.erase(j);
                        answerik(ind);
                    }
                    if (known[j] - known[i] > maxi) {
                        maxi = known[j] - known[i];
                        pm = {j, i};
                    }
                }
            }
            if (maxi == 0) {
                impossible();
            }
            taken[pm.fi] = 0;
            taken[pm.se] = 1;
            sum += known[pm.se] - known[pm.fi];
            ind.erase(pm.fi);
            ind.insert(pm.se);
        } else {
            ll maxi = 0;
            pair<ll, ll> pm;
            for (ll i = left + 1; i <= min(n, right + 1); i++) {
                if (known[i] == -1) {
                    ll x = skim(i);
                    known[i] = x;
                }
                if (taken[i])
                    continue;
                for (ll j : ind) {
                    if (sum - known[j] + known[i] >= A && sum - known[j] + known[i] <= 2 * A) {
                        sum += known[i] - known[j];
                        taken[j] = 0;
                        taken[i] = 1;
                        ind.insert(i);
                        ind.erase(j);
                        answerik(ind);
                    }
                    if (known[i] - known[j] > maxi) {
                        maxi = known[i] - known[j];
                        pm = {j, i};
                    }
                }
            }
            if (maxi == 0) {
                impossible();
            }
            taken[pm.fi] = 0;
            taken[pm.se] = 1;
            sum += known[pm.se] - known[pm.fi];
            ind.erase(pm.fi);
            ind.insert(pm.se);
        }
    }

}

/*
signed main() {
    //solve(15, 3, 42, 8);
}
*/

Compilation message

books.cpp: In function 'void answerik(std::set<long long int>)':
books.cpp:40:5: error: 'answer' was not declared in this scope; did you mean 'answerik'?
   40 |     answer(res);
      |     ^~~~~~
      |     answerik
books.cpp: In function 'void solve(ll, ll, ll, ll)':
books.cpp:49:16: error: 'skim' was not declared in this scope
   49 |         ll x = skim(m);
      |                ^~~~
books.cpp:57:9: error: 'impossible' was not declared in this scope
   57 |         impossible();
      |         ^~~~~~~~~~
books.cpp:65:20: error: 'skim' was not declared in this scope
   65 |             ll x = skim(curi);
      |                    ^~~~
books.cpp:78:20: error: 'skim' was not declared in this scope
   78 |             ll x = skim(curi);
      |                    ^~~~
books.cpp:88:9: error: 'impossible' was not declared in this scope
   88 |         impossible();
      |         ^~~~~~~~~~
books.cpp:108:40: error: no matching function for call to 'max(int, ll)'
  108 |             for (ll i = max(1, left - 1); i < right; i++) {
      |                                        ^
In file included from /usr/include/c++/10/bits/specfun.h:45,
                 from /usr/include/c++/10/cmath:1927,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:41,
                 from books.cpp:1:
/usr/include/c++/10/bits/stl_algobase.h:254:5: note: candidate: 'template<class _Tp> constexpr const _Tp& std::max(const _Tp&, const _Tp&)'
  254 |     max(const _Tp& __a, const _Tp& __b)
      |     ^~~
/usr/include/c++/10/bits/stl_algobase.h:254:5: note:   template argument deduction/substitution failed:
books.cpp:108:40: note:   deduced conflicting types for parameter 'const _Tp' ('int' and 'll' {aka 'long long int'})
  108 |             for (ll i = max(1, left - 1); i < right; i++) {
      |                                        ^
In file included from /usr/include/c++/10/bits/specfun.h:45,
                 from /usr/include/c++/10/cmath:1927,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:41,
                 from books.cpp:1:
/usr/include/c++/10/bits/stl_algobase.h:300:5: note: candidate: 'template<class _Tp, class _Compare> constexpr const _Tp& std::max(const _Tp&, const _Tp&, _Compare)'
  300 |     max(const _Tp& __a, const _Tp& __b, _Compare __comp)
      |     ^~~
/usr/include/c++/10/bits/stl_algobase.h:300:5: note:   template argument deduction/substitution failed:
books.cpp:108:40: note:   deduced conflicting types for parameter 'const _Tp' ('int' and 'll' {aka 'long long int'})
  108 |             for (ll i = max(1, left - 1); i < right; i++) {
      |                                        ^
In file included from /usr/include/c++/10/algorithm:62,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:65,
                 from books.cpp:1:
/usr/include/c++/10/bits/stl_algo.h:3480:5: note: candidate: 'template<class _Tp> constexpr _Tp std::max(std::initializer_list<_Tp>)'
 3480 |     max(initializer_list<_Tp> __l)
      |     ^~~
/usr/include/c++/10/bits/stl_algo.h:3480:5: note:   template argument deduction/substitution failed:
books.cpp:108:40: note:   mismatched types 'std::initializer_list<_Tp>' and 'int'
  108 |             for (ll i = max(1, left - 1); i < right; i++) {
      |                                        ^
In file included from /usr/include/c++/10/algorithm:62,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:65,
                 from books.cpp:1:
/usr/include/c++/10/bits/stl_algo.h:3486:5: note: candidate: 'template<class _Tp, class _Compare> constexpr _Tp std::max(std::initializer_list<_Tp>, _Compare)'
 3486 |     max(initializer_list<_Tp> __l, _Compare __comp)
      |     ^~~
/usr/include/c++/10/bits/stl_algo.h:3486:5: note:   template argument deduction/substitution failed:
books.cpp:108:40: note:   mismatched types 'std::initializer_list<_Tp>' and 'int'
  108 |             for (ll i = max(1, left - 1); i < right; i++) {
      |                                        ^
books.cpp:110:28: error: 'skim' was not declared in this scope
  110 |                     ll x = skim(i);
      |                            ^~~~
books.cpp:131:17: error: 'impossible' was not declared in this scope
  131 |                 impossible();
      |                 ^~~~~~~~~~
books.cpp:143:28: error: 'skim' was not declared in this scope
  143 |                     ll x = skim(i);
      |                            ^~~~
books.cpp:164:17: error: 'impossible' was not declared in this scope
  164 |                 impossible();
      |                 ^~~~~~~~~~