Submission #1153416

#TimeUsernameProblemLanguageResultExecution timeMemory
1153416SharkyCarnival Tickets (IOI20_tickets)C++20
100 / 100
783 ms104196 KiB
#include "tickets.h" #include <bits/stdc++.h> using namespace std; using ll = long long; ll find_maximum(int k, std::vector<std::vector<int>> x) { int n = x.size(); int m = x[0].size(); vector<vector<bool>> use(n, vector<bool> (m, 0)); vector<vector<int>> answer(n, vector<int> (m, -1)); ll ans = 0; vector<stack<int>> st(n); vector<vector<pair<int, int>>> a(n); priority_queue<pair<int, pair<int, int>>> q; for (int i = 0; i < n; i++) { vector<pair<int, int>> srt; for (int j = 0; j < m; j++) srt.push_back({x[i][j], j}); sort(srt.begin(), srt.end()); for (int j = 0; j < k; j++) { st[i].push(srt[j].second); ans -= srt[j].first; use[i][srt[j].second] = 1; } a[i] = srt; } for (int i = 0; i < n; i++) { q.push({a[i].back().first + x[i][st[i].top()], {i, st[i].top()}}); } int cnt = 0; while (!q.empty()) { auto [v, pr] = q.top(); auto [id, rw] = pr; q.pop(); cnt++; use[id][rw] = 0; use[id][a[id].back().second] = 1; ans += v; a[id].pop_back(); st[id].pop(); if (!st[id].empty()) q.push({a[id].back().first + x[id][st[id].top()], {id, st[id].top()}}); if (cnt >= (n*k)/2) break; } vector<array<int, 3>> val; for (int i = 0; i < n; i++) for (int j = 0; j < m; j++) if (use[i][j]) val.push_back({x[i][j], i, j}); sort(val.begin(), val.end(), [] (auto i, auto j) { return i[0] > j[0]; }); vector<queue<int>> stk(n), stk2(n); for (int i = 0; i < val.size() / 2; i++) stk[val[i][1]].push(val[i][2]); for (int i = val.size() / 2; i < val.size(); i++) stk2[val[i][1]].push(val[i][2]); for (int rd = 0; rd < k; rd++) { vector<pair<int, int>> sz; for (int i = 0; i < n; i++) sz.push_back({stk[i].size(), i}); sort(sz.rbegin(), sz.rend()); for (int i = 0; i < n/2; i++) { int tp = stk[sz[i].second].front(); stk[sz[i].second].pop(); answer[sz[i].second][tp] = rd; } for (int i = n/2; i < n; i++) { int tp = stk2[sz[i].second].front(); stk2[sz[i].second].pop(); answer[sz[i].second][tp] = rd; } } allocate_tickets(answer); return ans; }
#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...