Submission #835976

#TimeUsernameProblemLanguageResultExecution timeMemory
835976maomao90Carnival Tickets (IOI20_tickets)C++17
100 / 100
550 ms75292 KiB
// I can do all things through Christ who strengthens me // Philippians 4:13 #include "tickets.h" #include <bits/stdc++.h> using namespace std; #define REP(i, j, k) for (int i = j; i < (k); i++) #define RREP(i, j, k) for (int i = j; i >= (k); i--) template <class T> inline bool mnto(T &a, const T b) {return a > b ? a = b, 1 : 0;} template <class T> inline bool mxto(T &a, const T b) {return a < b ? a = b, 1 : 0;} typedef long long ll; typedef long double ld; #define FI first #define SE second typedef pair<int, int> ii; typedef pair<ll, ll> pll; #define ALL(x) x.begin(), x.end() #define SZ(x) (int) x.size() #define pb push_back typedef vector<int> vi; typedef vector<ll> vll; typedef vector<ii> vii; typedef tuple<int, int, int> iii; typedef vector<iii> viii; #ifndef DEBUG #define cerr if (0) cerr #endif const int INF = 1000000005; const ll LINF = 1000000000000000005; const int MAXN = 1505; int n, m, k; vector<vi> x, s; ii diff[MAXN]; vi grp[MAXN][2]; bool used[MAXN * MAXN]; ll ans; int l[MAXN], r[MAXN]; priority_queue<ii> pq; ll find_maximum(int _k, vector<vi> _x) { k = _k; x = _x; n = SZ(x); m = SZ(x[0]); s = vector<vi>(n, vi(m, -1)); viii vx; REP (i, 0, n) { r[i] = m - k; l[i] = 0; REP (j, m - k, m) { ans += x[i][j]; } pq.push({-x[i][r[i]] - x[i][l[i]], i}); } REP (z, 0, n / 2 * k) { auto [v, i] = pq.top(); pq.pop(); ans += v; r[i]++; l[i]++; if (r[i] != m) { pq.push({-x[i][r[i]] - x[i][l[i]], i}); } } REP (i, 0, n) { REP (j, 0, l[i]) { grp[i][0].pb(j); } REP (j, r[i], m) { grp[i][1].pb(j); } } REP (z, 0, k) { int cnt[2] = {0, 0}; REP (i, 0, n) { if (grp[i][0].empty()) { cnt[1]++; int j = grp[i][1].back(); grp[i][1].pop_back(); s[i][j] = z; } else if (grp[i][1].empty()) { cnt[0]++; int j = grp[i][0].back(); grp[i][0].pop_back(); s[i][j] = z; } } REP (i, 0, n) { if (grp[i][0].empty() || grp[i][1].empty()) { continue; } REP (l, 0, 2) { if (cnt[l] == n / 2) { continue; } cnt[l]++; int j = grp[i][l].back(); grp[i][l].pop_back(); s[i][j] = z; break; } } } 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...