#include "tickets.h"
#include <vector>
#include <iostream>
#include <algorithm>
#include <cassert>
using ll = long long;
ll find_maximum(int k, std::vector<std::vector<int>> a) {
int n = (int) a.size();
int m = (int) a[0].size();
std::vector<std::vector<int>> answer(n, std::vector<int>(m, -1));
std::vector<int> cntneg(n, k);
std::vector<int> cntpos(n, 0);
ll sum = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < k; j++) {
sum += -a[i][j];
}
}
std::vector<std::pair<int, int>> deltas;
for (int i = 0; i < n; i++) {
for (int alcatelea = 1; alcatelea <= k; alcatelea++) {
int apare = m - alcatelea;
int dispare = k - alcatelea;
deltas.push_back({a[i][apare] + a[i][dispare], i});
}
}
std::sort(deltas.begin(), deltas.end());
std::reverse(deltas.begin(), deltas.end());
for (int i = 0; i < n * k / 2; i++) {
auto [increase, row] = deltas[i];
sum += increase;
cntpos[row]++;
cntneg[row]--;
}
for (int round = 0; round < k; round++) {
std::vector<int> rows;
for (int i = 0; i < n; i++) {
rows.push_back(i);
}
std::sort(rows.begin(), rows.end(), [&](int x, int y) {
return cntpos[x] > cntpos[y];
});
for (int i = 0; i < n / 2; i++) {
answer[rows[i]][m - cntpos[rows[i]]--] = round;
}
for (int i = n / 2; i < n; i++) {
answer[rows[i]][--cntneg[rows[i]]] = round;
}
}
allocate_tickets(answer);
return sum;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |