#include "tickets.h"
#include <bits/stdc++.h>
#define all(a) a.begin(), a.end()
using namespace std;
typedef long long ll;
ll find_maximum(int k, vector<vector<int>> a) {
int n = a.size();
int m = a[0].size();
vector<int> up(n);
vector<int> down(n);
ll sum = 0;
priority_queue<pair<ll, int>, vector<pair<ll, int>>, greater<pair<ll, int>>> pq;
for (int i = 0; i < n; i++) {
up[i] = k;
down[i] = 0;
for (int j = m - k; j < m; j++) {
sum += a[i][j];
}
pq.push({a[i][m - k] + a[i][0], i});
}
for (int it = 1; it <= n * k / 2; it++) {
pair<ll, int> x = pq.top();
pq.pop();
sum -= x.first;
down[x.second]++;
up[x.second]--;
if (up[x.second] != 0) {
pq.push({a[x.second][m - up[x.second]] + a[x.second][down[x.second]], x.second});
}
}
vector<vector<int>> sol(n, vector<int>(m, -1));
vector<int> small(k, 0), big(k, 0);
int i = n - 1;
while (i >= 0) {
int x = up[i];
int r = 0;
vector<bool> seen(k);
for (int it = 0; it < m; it++) {
if (it < k - x) {
while (small[r] == n / 2 || seen[r]) {
r = (r + 1) % k;
}
seen[r] = 1;
sol[i][it] = r;
small[r]++;
}
if (m - it <= x) {
while (big[r] == n / 2 || seen[r]) {
r = (r + 1) % k;
}
seen[r] = 1;
sol[i][it] = r;
big[r]++;
}
}
i--;
}
allocate_tickets(sol);
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... |