Submission #1259346

#TimeUsernameProblemLanguageResultExecution timeMemory
1259346biankCarnival Tickets (IOI20_tickets)C++20
100 / 100
428 ms54344 KiB
#include "tickets.h" #include <bits/stdc++.h> #define forsn(i, s, n) for (int i = int(s); i < int(n); i++) #define forn(i, n) forsn(i, 0, n) #define dforsn(i, s, n) for (int i = int(n) - 1; i >= int(s); i--) #define dforn(i, n) dforsn(i, 0, n) #define sz(x) int(x.size()) #define all(x) begin(x), end(x) #define pb push_back #define eb emplace_back #define fst first #define snd second using namespace std; using vi = vector<int>; using ii = pair<int, int>; using ll = long long; ll find_maximum(int k, vector<vi> x) { int n = sz(x), m = sz(x[0]); ll ret = 0; int sub = n * k, sum = 0; forn(i, n) forn(j, k) ret -= x[i][j]; vi pos(n, 0); priority_queue<pair<ll, int>> pq; forn(i, n) pq.emplace(x[i][k - 1] + x[i][m - 1], i); while (sub != sum) { auto [diff, i] = pq.top(); pq.pop(), sub--, sum++, ret += diff, pos[i]++; if (k - pos[i] - 1 >= 0) pq.emplace(x[i][k - 1 - pos[i]] + x[i][m - 1 - pos[i]], i); } vi left(n), right(n); forn(i, n) left[i] = k - pos[i], right[i] = pos[i]; vector<vi> ans(n, vi(m, -1)); forn(r, k) { vi order(n); iota(all(order), 0); sort(all(order), [&](const int &lhs, const int &rhs) { return right[lhs] > right[rhs]; }); forn(idx, n / 2) { int i = order[idx]; assert(right[i] >= 1); ans[i][m - right[i]] = r; right[i]--; } forsn(idx, n / 2, n) { int i = order[idx]; assert(left[i] >= 1); ans[i][left[i] - 1] = r; left[i]--; } } allocate_tickets(ans); 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...