Submission #418104

#TimeUsernameProblemLanguageResultExecution timeMemory
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...