제출 #308052

#제출 시각아이디문제언어결과실행 시간메모리
308052jwvg0425카니발 티켓 (IOI20_tickets)C++17
25 / 100
1050 ms84348 KiB
#include "tickets.h" #include <vector> #include <algorithm> #include <set> #include <queue> #define all(x) x.begin(), x.end() using namespace std; using i64 = long long int; using ii = pair<int, int>; struct Ticket { int color; int idx; int value; }; i64 find_maximum(int k, vector<vector<int>> x) { int n = x.size(); int m = x[0].size(); vector<Ticket> tickets; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { Ticket t; t.color = i; t.idx = j; t.value = x[i][j]; tickets.push_back(t); } } sort(all(tickets), [](const Ticket& l, const Ticket& r) { return l.value < r.value; }); i64 ret = 0; vector<vector<int>> ans(n, vector<int>(m, -1)); vector<vector<int>> small(n); vector<vector<int>> large(n); for (int l = 0; l < k * n / 2; l++) { int r = n * m - 1 - l; ret += tickets[r].value - tickets[l].value; small[tickets[l].color].push_back(tickets[l].idx); large[tickets[r].color].push_back(tickets[r].idx); } int gidx = 0; for (int color = 0; color < n; color++) { for (auto& s : small[color]) { ans[color][s] = gidx; gidx = (gidx + 1) % m; } int lgi = gidx; for (auto& l : large[color]) { ans[color][l] = lgi; lgi = (lgi + 1) % m; } } allocate_tickets(ans); return ret; }
#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...