Submission #364046

#TimeUsernameProblemLanguageResultExecution timeMemory
364046wind_reaperCarnival Tickets (IOI20_tickets)C++17
16 / 100
778 ms51412 KiB
#include "tickets.h" #include <bits/stdc++.h> using namespace std; long long find_maximum(int k, vector<vector<int>> x) { int n = x.size(); int m = x[0].size(); vector<vector<int>> ans(n, vector<int>(m, -1)); long long a = 0; for(int i = 0; i < n; i++){ for(int j = n-1; j >= n-k; --j){ ans[i][j] = (n-1-j); a += 1LL*x[i][j]; } } vector<array<int, 4>> b; for(int i = 0; i < n; i++){ for(int j = 0; j < k; j++) for(int w = n-1; w >= n-k; --w) b.push_back({x[i][j] + x[i][w], i, j, w}); } sort(b.begin(), b.end()); int exchanges = 0; for(auto& [red, row, mn, mx] : b){ if(exchanges == (n*k)/2) break; if(ans[row][mx] == -1 || ans[row][mn] != -1) continue; a -= 1LL*red; swap(ans[row][mx], ans[row][mn]); exchanges++; } allocate_tickets(ans); return a; } /* for every i, j < k exchange the i th minimum and j th maximum each exchange costs x[i] + x[j] ... take the first nk/2 valid exchanges */
#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...