Submission #1257011

#TimeUsernameProblemLanguageResultExecution timeMemory
1257011antonn카니발 티켓 (IOI20_tickets)C++20
27 / 100
3093 ms51380 KiB
#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 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...