제출 #418104

#제출 시각아이디문제언어결과실행 시간메모리
418104qwerasdfzxclCarnival Tickets (IOI20_tickets)C++14
27 / 100
622 ms52744 KiB
#include "tickets.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; ll find_maximum(int k, vector<vector<int>> x) { int n = x.size(); int m = x[0].size(); vector<vector<int>> ans; ans.resize(n); for (int i=0;i<n;i++){ ans[i].resize(m); fill(ans[i].begin(), ans[i].end(), -1); } ll ret = 0; vector<pair<int, int>> LR(n); fill(LR.begin(), LR.end(), make_pair(0, m-1)); for (int z=0;z<k;z++){ priority_queue<pair<ll, int>> pq; for (int i=0;i<n;i++){ ret += x[i][LR[i].second]; pq.push({-x[i][LR[i].first]-x[i][LR[i].second], i}); ans[i][LR[i].second] = z; LR[i].second--; } for (int i=0;i<n/2;i++){ auto p = pq.top(); pq.pop(); ret += p.first; ans[p.second][LR[p.second].second+1] = -1; ans[p.second][LR[p.second].first] = z; LR[p.second].first++, LR[p.second].second++; } } if (k==m){ vector<int> tmp; for (int i=0;i<n;i++){ for (int j=0;j<m;j++) tmp.push_back(x[i][j]); } sort(tmp.begin(), tmp.end()); ll val = 0; for (int i=0;i<n*m/2;i++) val -= tmp[i]; for (int i=n*m/2;i<n*m;i++) val += tmp[i]; if (val!=ret) assert(k<=2); } 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...