Submission #471448

#TimeUsernameProblemLanguageResultExecution timeMemory
471448ljubaCarnival Tickets (IOI20_tickets)C++17
27 / 100
615 ms64016 KiB
#include "tickets.h" #include <bits/stdc++.h> typedef long long ll; using namespace std; ll find_maximum(int k, vector<vector<int>> x) { int n = (int)x.size(); int m = (int)x[0].size(); ll ans = 0; vector<vector<int>> znak(n, vector<int>(m, 0)); priority_queue<pair<ll, pair<int, int>>> pq; for(int i = 0; i < n; ++i) { for(int j = 0; j < k; ++j) { ans -= x[i][j]; znak[i][j] = -1; int ind = k-1-j; ind = m-1-ind; ll dodaj = x[i][j] + x[i][ind]; pq.push({dodaj, {i, j}}); } } for(int uradi = 0; uradi < n*k/2; ++uradi) { auto tren = pq.top(); ans += tren.first; pair<int, int> mesto = tren.second; pq.pop(); znak[mesto.first][mesto.second] = 0; int ind = k-1-mesto.second; ind = m-1-ind; znak[mesto.first][ind] = 1; } vector<stack<int>> minus(n), plus(n); for(int i = 0; i < n; ++i) { for(int j = 0; j < m; ++j) { if(znak[i][j] == -1) { minus[i].push(j); } else if(znak[i][j] == 1) { plus[i].push(j); } } } vector<vector<int>> odg(n, vector<int>(m, -1)); for(int uradi = 0; uradi < k; ++uradi) { vector<bool> marked(n, false); for(int i = 0; i < n; ++i) { if(!minus[i].empty()) { int iznad = minus[i].top(); odg[i][iznad] = uradi; marked[i] = true; minus[i].pop(); } } for(int i = 0; i < n; ++i) { if(marked[i]) continue; int iznad = plus[i].top(); odg[i][iznad] = uradi; plus[i].pop(); } } allocate_tickets(odg); 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...