Submission #674840

#TimeUsernameProblemLanguageResultExecution timeMemory
674840VodkaInTheJar카니발 티켓 (IOI20_tickets)C++14
Compilation error
0 ms0 KiB
#include <bits/stdc++.h>
#pragma GCC optimize("O3")
#define endl '\n'

using namespace std;

long long find_maximum(int k, vector <vector <int> > x) {
    int n = (int)x.size(), m = (int)x[0].size();
    vector <int> taken(n, k);
    long long ans = 0;
    int balance = 0; 
    priority_queue <pair <int, int> > pq; 
    for (int i = 0; i < n; i++) {
        for (int j = m - k; j < m; j++)
            ans += x[i][j];

        taken[i] = k;
        balance += k; 
        pq.push({-x[i][m-k]-x[i][0], i});
    }

    while (balance > 0) {
        pair <int, int> curr = pq.top();
        pq.pop();

        ans += curr.first;
        balance -= 2; 
        taken[curr.second]--;
        if (taken[curr.second] != 0)
            pq.push({-x[curr.second][m-taken[curr.second]]-x[curr.second][k-taken[curr.second]], curr.second});
    }

    vector <pair <int, pair <int, int> > > vec; 
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < k - taken[i]; j++)
            vec.push_back({x[i][j], {-i, j}});
    
        for (int j = m - taken[i]; j < m; j++)
            vec.push_back({x[i][j], {i, j}});
    }
    
    sort (vec.begin(), vec.end());
    set <pair <int, int> > s;
    vector <vector <int> > r(n, vector <int> (m, -1));
    vector <vector <bool> > used(k, vector <bool> (n, false));
    for (int i = 0; i < k; i++)
        s.insert({0, i});

    for (auto i: vec) {
        if (i.second.first < 0) {
            for (auto it = prev(s.end()); ; it--) {
                if (!used[it->second][-i.second.first]) {
                    used[it->second][-i.second.first] = true;
                    r[-i.second.first][i.second.second] = it->first;
                    auto to_insert = *it; 
                    to_insert.first--;

                    s.erase(it);
                    s.insert(to_insert);
                    break;
                }
            }
        }

        else {
            for (auto it = s.begin(); ; it++) {
                if (!used[it->second][i.second.first]) {
                    used[it->second][i.second.first] = true;
                    r[i.second.first][i.second.second] = it->first;
                    auto to_insert = *it; 
                    to_insert.first++;

                    s.erase(it);
                    s.insert(to_insert);
                    break;
                }
            }
        }
    }

    allocate_tickets(r);

    return ans; 
}

Compilation message (stderr)

tickets.cpp: In function 'long long int find_maximum(int, std::vector<std::vector<int> >)':
tickets.cpp:81:5: error: 'allocate_tickets' was not declared in this scope
   81 |     allocate_tickets(r);
      |     ^~~~~~~~~~~~~~~~