Submission #1232342

#TimeUsernameProblemLanguageResultExecution timeMemory
1232342M_W_13Carnival Tickets (IOI20_tickets)C++20
100 / 100
681 ms83916 KiB
#include "tickets.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; #define rep(i, n) for (int i = 0; i < (n); i++) #define st first #define nd second #define pb push_back long long find_maximum(int k, std::vector<std::vector<int>> x) { int n = x.size(); int m = x[0].size(); int dod[n]; int uj[n]; int ile[n]; int gora[n]; int dol[n]; rep(i, n) { ile[i] = 0; dod[i] = 0; dol[i] = 0; gora[i] = m - 1; uj[i] = k; } priority_queue<pair<ll, int>> pq; ll ans = 0; rep(i, n) { rep(j, k) { ans -= x[i][j]; } } rep(i, n) { rep(j, k) { pq.push({x[i][m - 1 - j] + x[i][k - 1 - j], i}); } } ll pom = (k * n)/2; while (pom--) { pair<ll, int> p = pq.top(); pq.pop(); if (ile[p.nd] == k) continue; ile[p.nd]++; dod[p.nd]++; uj[p.nd]--; ans += p.st; } vector<vector<int>> s; rep(i, n) { s.pb({}); rep(j, m) { s[i].pb(-1); } } rep(r, k) { vector<pair<int, int>> vec; rep(i, n) { vec.pb({uj[i], i}); } sort(vec.begin(), vec.end()); int n2 = n/2; rep(i, n2) { int it = vec[i].nd; s[it][gora[it]] = r; dod[it]--; gora[it]--; } for (int i = n2; i < n; i++) { int it = vec[i].nd; s[it][dol[it]] = r; uj[it]--; dol[it]++; } } allocate_tickets(s); return ans; }
#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...