Submission #301136

#TimeUsernameProblemLanguageResultExecution timeMemory
301136andrewCarnival Tickets (IOI20_tickets)C++17
100 / 100
1936 ms161404 KiB
#include <bits/stdc++.h> #include "tickets.h" #define fi first #define se second #define pii pair <int, int> #define pll pair <ll, ll> #define all(x) x.begin(), x.end() #define sz(x) (int)x.size() #define p_b push_back using namespace std; typedef long long ll; const ll inf = 1e18; long long find_maximum(int k, std::vector<std::vector<int>> x) { int n = x.size(); int m = x[0].size(); std::vector<std::vector<int>> answer(n, vector <int> (m, -1)); ll ans = 0; vector <ll> c(n); vector <vector <pll> > xx(n, vector <pll> (m)); vector <vector <bool> > f(n, vector <bool> (m)); set <pll> st; for(int i = 0; i < n; i++){ for(int j = 0; j < m; j++){ xx[i][j] = {x[i][j], j}; } sort(all(xx[i])); for(int j = m - k; j < m; j++)ans += xx[i][j].fi; st.insert({-xx[i][0].fi - xx[i][m - k].fi, i}); } ll t = k * (n / 2); while(t--){ pll xe = *--st.end(); ans += xe.fi; st.erase(xe); c[xe.se]++; if(c[xe.se] < k){ st.insert({-xx[xe.se][c[xe.se]].fi - xx[xe.se][m - k + c[xe.se]].fi, xe.se}); } } vector <pair <ll, pll> > vc; for(int i = 0; i < n; i++){ for(int j = 0; j < c[i]; j++)vc.p_b({xx[i][j].fi, {i, xx[i][j].se}}); for(int j = m - k + c[i]; j < m; j++)vc.p_b({xx[i][j].fi, {i, xx[i][j].se}}); } sort(all(vc)); reverse(all(vc)); int M = k * (n / 2); for(auto i : vc){ M--; f[i.se.fi][i.se.se] = 1; if(!M)break; } int uk = 0; for(int i = 0; i < n; i++){ set <int> s; for(int j = 0; j < k; j++)s.insert(j); for(int j = 0; j < m; j++){ if(f[i][j]){ answer[i][j] = uk; s.erase(uk); (uk += 1) %= k; } } c[i] = sz(s); for(int j = 0; j < c[i]; j++){ answer[i][xx[i][j].se] = *s.begin(); s.erase(s.begin()); } } allocate_tickets(answer); 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...