Submission #425139

#TimeUsernameProblemLanguageResultExecution timeMemory
425139MlxaCarnival Tickets (IOI20_tickets)C++14
39 / 100
1014 ms88812 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; #define all(x) x.begin(), x.end() #define mp make_pair #define mt make_tuple #define x first #define y second #include "tickets.h" #include <vector> const int N = 2000; int cnt[N], lef[N], rig[N]; ll find_maximum(int k, vector<vector<int>> x) { int n = (int)x.size(); int m = (int)x[0].size(); vector<int> order; for (int i = 0; i < n; ++i) { for (int j = 0; j < m; ++j) { order.push_back(x[i][j]); } } sort(all(order)); int bound = -1, best = n * m; for (int i = 1; i < (int)order.size(); ++i) { if (order[i] == order[i - 1]) { continue; } int val = abs(i - (n * m - i)); if (best > val) { best = val; bound = order[i]; } } vector<vector<int>> answer(n, vector<int>(m, -1)); int ones = 0; for (int i = 0; i < n; ++i) { for (int j = 0; j < m; ++j) { cnt[i] += x[i][j] >= bound; ones += x[i][j] >= bound; } } fill_n(lef, n, 0); fill_n(rig, n, m - 1); vector<int> rows(n); iota(all(rows), 0); for (int i = 0; i < k; ++i) { sort(all(rows), [&](int ii, int jj) { return cnt[ii] < cnt[jj]; }); // cout << "--- " << i << endl; for (int j = 0; j < n / 2; ++j) { int sj = j; j = rows[j]; // cout << "lef " << j << endl; cnt[j] -= x[j][lef[j]] >= bound; answer[j][lef[j]++] = i; j = sj; } for (int j = n / 2; j < n; ++j) { int sj = j; j = rows[j]; // cout << "rig " << j << endl; cnt[j] -= x[j][rig[j]] >= bound; answer[j][rig[j]--] = i; j = sj; } } vector<vector<int>> res(k); for (int i = 0; i < n; ++i) { for (int j = 0; j < m; ++j) { // cout << answer[i][j] << " "; if (answer[i][j] != -1) { res[answer[i][j]].push_back(x[i][j]); } } // cout << endl; } ll sum = 0; for (int i = 0; i < k; ++i) { sort(all(res[i])); assert((int)res[i].size() == n); for (int j = 0; j < n / 2; ++j) { sum += res[i][n - 1 - j] - res[i][j]; } } allocate_tickets(answer); return sum; } #ifdef LC #include "grader.cpp" #endif
#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...