Submission #1238252

#TimeUsernameProblemLanguageResultExecution timeMemory
1238252SalihSahin카니발 티켓 (IOI20_tickets)C++20
100 / 100
485 ms72084 KiB
#include "bits/stdc++.h" #include "tickets.h" #define pb push_back using namespace std; const long long inf = 1e15; long long find_maximum(int k, vector<vector<int>> x) { int n = x.size(); int m = x[0].size(); vector<vector<int>> ans(n, vector<int>(m, -1)); vector<vector<long long> > add(n, vector<long long>(k+1)); vector<int> ind(n); for(int i = 0; i < n; i++){ vector<pair<int, int> > arr; for(int j = 0; j < m; j++){ arr.pb({x[i][j], j}); } sort(arr.begin(), arr.end()); long long now = 0; for(int j = 0; j < k; j++){ now -= arr[j].first; } add[i][0] = now; for(int j = 0; j < k; j++){ now += arr[(k - j - 1)].first; now += arr[m - j - 1].first; add[i][j+1] = now; } } priority_queue<array<long long, 2> > pq; long long mval = 0; for(int i = 0; i < n; i++){ mval += add[i][0]; pq.push({add[i][ind[i]+1] - add[i][ind[i]], i}); } for(int tur = 0; tur < n*k/2; tur++){ int i = pq.top()[1]; long long art = pq.top()[0]; pq.pop(); mval += art; ind[i]++; if(ind[i] != k){ pq.push({add[i][ind[i]+1] - add[i][ind[i]], i}); } } pair<int, int> lst = {0, 0}; vector<pair<int, int> > parlist; parlist.pb(lst); for(int i = 0; i < n; i++){ parlist.pb({i+1, lst.second + ind[i]}); lst = {i+1, lst.second + ind[i]}; } int lstsm = 0, lstbg = k-1, parind = parlist.size()-1; while(parind > 0){ pair<int, int> nxt = parlist[parind-1]; pair<int, int> now = parlist[parind]; int big = now.second - nxt.second; int small = k - big; vector<pair<int, int> > arr; for(int j = 0; j < m; j++){ arr.pb({x[nxt.first][j], j}); } sort(arr.begin(), arr.end()); for(int i = 0; i < small; i++){ ans[nxt.first][arr[i].second] = lstsm++; if(lstsm == k) lstsm -= k; } for(int i = m-1; i >= m-big; i--){ ans[nxt.first][arr[i].second] = lstbg--; if(lstbg == -1) lstbg += k; } parind--; } allocate_tickets(ans); return mval; }
#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...