제출 #824740

#제출 시각아이디문제언어결과실행 시간메모리
824740thimote75카니발 티켓 (IOI20_tickets)C++14
100 / 100
686 ms76196 KiB
#include "tickets.h" #include <bits/stdc++.h> #define int long long using namespace std; using idata = vector<int>; using igrid = vector<idata>; using di = pair<int, int>; using vd = vector<di>; int find_maximum(signed K, vector<vector<signed>> x) { int N = x.size(); int M = x[0].size(); int H = N >> 1; int result = 0; for (int i = 0; i < N; i ++) for (int k = 1; k <= K; k ++) result += x[i][M - k]; priority_queue<di> deltas; idata R(N, M - K); for (int i = 0; i < N; i ++) deltas.push({ - x[i][0] - x[i][M - K], i }); for (int i = 0; i < H * K; i ++) { di curr = deltas.top(); deltas.pop(); int j = curr.second; result += curr.first; R[j] ++; if (R[j] == M) continue ; int al = R[j] - (M - K); deltas.push({ - x[j][al] - x[j][R[j]], j }); } vector<vector<signed>> allocations(N, vector<signed>(M, -1)); idata L(N, 0); for (int k = 0; k < K; k ++) { vd RV; for (int i = 0; i < N; i ++) RV.push_back({ R[i], i }); sort(RV.rbegin(), RV.rend()); for (int i = 0; i < H; i ++) { int e = RV[i].second; allocations[e][L[e]] = k; L[e] ++; } for (int i = H; i < N; i ++) { int e = RV[i].second; allocations[e][R[e]] = k; R[e] ++; } } allocate_tickets(allocations); return result; }
#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...