Submission #423045

#TimeUsernameProblemLanguageResultExecution timeMemory
423045peijar카니발 티켓 (IOI20_tickets)C++17
11 / 100
2 ms588 KiB
#include <bits/stdc++.h> using namespace std; #include "tickets.h" long long find_maximum(int k, vector<vector<int>> x) { int n = x.size(); int m = x[0].size(); vector<vector<int>> answer(n, vector<int>(m, -1)); if (m == 1) { assert(k == 1); vector<int> elements; for (int i(0); i < n; ++i) { answer[i][0] = 0; elements.push_back(x[i][0]); } allocate_tickets(answer); long long ans = 0; sort(elements.begin(), elements.end()); int mid = elements[n / 2]; for (int v : elements) ans += abs(mid - v); return ans; } else if (k == 1) { vector<pair<int, int>> pairs(n); vector<bool> pickSide; long long sol = -1; for (int i(0); i < n; ++i) pairs[i] = make_pair(x[i][0], x[i].back()); auto calcAns = [&](int mediane) { priority_queue<pair<int, int>> bstRemoved; vector<bool> side(n); long long curSol = 0; int neededRight = n / 2; for (int i(0); i < n; ++i) { if (pairs[i].second < mediane) { curSol += mediane - pairs[i].first; continue; } curSol += pairs[i].second - mediane; side[i] = 1; if (pairs[i].first > mediane) neededRight--; else bstRemoved.emplace(2 * mediane - (pairs[i].first + pairs[i].second), i); while ((int)bstRemoved.size() > neededRight) { auto [delta, pos] = bstRemoved.top(); bstRemoved.pop(); curSol += delta; side[pos] = 0; } } int cnt = 0; for (auto v : side) cnt += v; if (cnt == n / 2 and curSol > sol) sol = curSol, pickSide = move(side); }; for (auto [med1, med2] : pairs) calcAns(med1), calcAns(med2); for (int i(0); i < n; ++i) { if (pickSide[i]) answer[i].back() = 0; else answer[i][0] = 0; } allocate_tickets(answer); return sol; } allocate_tickets(answer); return 1; }
#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...