Submission #421419

#TimeUsernameProblemLanguageResultExecution timeMemory
421419MazaalaiCarnival Tickets (IOI20_tickets)C++14
27 / 100
632 ms69524 KiB
#include "tickets.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair <ll, ll> PII; #define ff first #define ss second long long find_maximum(int k1, vector <vector <int> > x1) { ll n = x1.size(); ll m = x1[0].size(); ll k = k1; vector <vector <int> > answer(n, vector <int>(m, -1)); vector <vector <bool> > state(n, vector <bool>(m, 0)); vector <vector <ll> > x(n, vector<ll>(m)); for (int i = 0; i < n; i++) for (int j = 0; j < m; j++) x[i][j] = x1[i][j]; vector <ll> hiIdx(n+5, m-1); vector <ll> loIdx(n+5, k-1); // number picked : n * k -> + (n/2*k)(-), (n/2*k)(+) set <PII> dif; // val, line ll ans = 0, half = n * k / 2; for (int i = 0; i < n; i++) { for (int j = 0; j < k; j++) { state[i][j] = 1; ans -= x[i][j]; } dif.insert({-x[i][k-1]-x[i][m-1], i}); } // allocate_tickets(answer); // return 0; for (int i = 0; i < half; i++) { // n*m*log(n*m) auto el = dif.begin(); dif.erase(el); ll a, b; tie(a, b) = *el; ans -= a; if (loIdx[b] >= 0) state[b][loIdx[b]--] = 0; if (hiIdx[b] >= 0) state[b][hiIdx[b]--] = 1; if ( loIdx[b] >= 0) dif.insert({-x[b][loIdx[b]]-x[b][hiIdx[b]], b}); } for (int i = 0; i < n; i++) { int cur = 0; for (int j = 0; j < m; j++) { if (state[i][j]) answer[i][j] = cur++; } } 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...