Submission #1239575

#TimeUsernameProblemLanguageResultExecution timeMemory
1239575Ghulam_Junaid카니발 티켓 (IOI20_tickets)C++20
0 / 100
0 ms320 KiB
#include <bits/stdc++.h> #include "tickets.h" // #include "grader.cpp" using namespace std; typedef long long ll; ll find_maximum(int k, vector<vector<int>> x) { int n = x.size(); int m = x[0].size(); vector<vector<int>> output; output.resize(n); for (int i = 0; i < n; i ++) output[i].resize(m, -1); ll res = 0; int mn[n], mx[n], mxp[n]; priority_queue<pair<int, int>> pq; for (int i = 0; i < n; i ++){ for (int j = 0; j < k; j ++) res -= x[i][j]; mn[i] = k, mx[i] = 0; pq.push({x[i][m - mx[i] - 1] + x[i][mn[i] - 1], i}); } int flips = (n / 2) * k; while (flips--){ auto [inc, col] = (pq.top()); pq.pop(); res += inc; mn[col]--; mx[col]++; if (mn[col]) pq.push({x[col][m - mx[col] - 1] + x[col][mn[col] - 1], col}); } for (int round = 0; round < k; round ++){ vector<int> mins, maxs; while (!pq.empty()) pq.pop(); for (int i = 0; i < n; i ++){ if (mx[i] == 0) mins.push_back(i); else if (mn[i] == 0) maxs.push_back(i); else pq.push({x[i][mn[i] - 1], i}); } while (mins.size() < n / 2){ mins.push_back((pq.top()).second); pq.pop(); } while (pq.size()){ maxs.push_back((pq.top()).second); pq.pop(); } for (int i : mins){ output[i][mn[i] - 1] = round; mn[i]--; } for (int i : maxs){ output[i][m - mxp[i] - 1] = round; mxp[i]++; mx[i]--; } } allocate_tickets(output); return res; }
#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...