제출 #559889

#제출 시각아이디문제언어결과실행 시간메모리
559889AlperenT카니발 티켓 (IOI20_tickets)C++17
76 / 100
987 ms105936 KiB
#include "tickets.h" #include <bits/stdc++.h> using namespace std; struct Item{ int x, i, j; bool operator < (const Item &sc) const{ return x < sc.x; } }; long long find_maximum(int k, vector<vector<int>> arr){ int n = arr.size(); int m = arr[0].size(); vector ans(n, vector(m, -1)); long long ansvalue = 0; vector<Item> v; for(int i = 0; i < n; i++){ for(int j = 0; j < k; j++){ ansvalue += arr[i][m - 1 - j]; } } for(int i = 0; i < n; i++){ for(int j = 0; j < k; j++){ v.push_back({arr[i][j] + arr[i][m - k + j], i, j}); } } sort(v.begin(), v.end()); vector zeros(n, vector<int>()), ones(n, vector<int>()); for(int i = 0; i < (n * k) / 2; i++){ ansvalue -= v[i].x; zeros[v[i].i].push_back(v[i].j); } for(int i = (n * k) / 2; i < n * k; i++){ ones[v[i].i].push_back(m - k + v[i].j); } for(int i = 0; i < k; i++){ vector<pair<int, int>> v; for(int j = 0; j < n; j++) v.push_back({zeros[j].size(), j}); sort(v.begin(), v.end(), greater<decltype(v[0])>()); for(int j = 0; j < n / 2; j++){ ans[v[j].second][zeros[v[j].second].back()] = i; zeros[v[j].second].pop_back(); } for(int j = n / 2; j < n; j++){ ans[v[j].second][ones[v[j].second].back()] = i; ones[v[j].second].pop_back(); } } allocate_tickets(ans); return ansvalue; }
#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...