Submission #303056

#TimeUsernameProblemLanguageResultExecution timeMemory
303056tutisCarnival Tickets (IOI20_tickets)C++17
39 / 100
3099 ms2097156 KiB
#include "tickets.h" #include <vector> #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>> answer(n, vector<int>(m, -1)); long long ret = 0; int mxp = n / 2 * k; pair<long long, int> mx[n + 1][mxp + 1]; for (int i = 0; i <= n; i++) for (int j = 0; j <= mxp; j++) mx[i][j] = { -1e18, 0}; mx[0][0] = {0, 0}; for (int i = 0; i < n; i++) { long long del = 0; for (int c = 0; c < k; c++) del -= x[i][c]; for (int p = 0; p <= k; p++) { for (int a = 0; a + p <= mxp; a++) mx[i + 1][a + p] = max(mx[i + 1][a + p], {mx[i][a].first + del, p}); if (p < k) { del += x[i][k - 1 - p]; del += x[i][m - 1 - p]; } } } int p = mxp; int M[n], P[n]; ret = mx[n][p].first; for (int i = n - 1; i >= 0; i--) { int pp = mx[i + 1][p].second; p -= pp; P[i] = pp; M[i] = k - P[i]; } int a[n]; int b[n]; for (int i = 0; i < n; i++) { a[i] = 0; b[i] = m - 1; } for (int g = 0; g < k; g++) { pair<int, int>x[n]; for (int i = 0; i < n; i++) x[i] = {P[i], i}; sort(x, x + n); for (int i = 0; i < n / 2; i++) { int id = x[i].second; answer[id][a[id]] = g; a[id]++; M[id]--; } for (int i = n / 2; i < n; i++) { int id = x[i].second; answer[id][b[id]] = g; b[id]--; P[id]--; } } allocate_tickets(answer); return ret; }
#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...