This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "tickets.h"
#include <vector>
#include <algorithm>
#include <iostream>
#include <queue>
using namespace std;
struct elem
{
	int row, colm, colM, val;
};
bool operator<(const elem& x, const elem& y)
{
	return x.val < y.val;
}
long long find_maximum(int k, std::vector<std::vector<int>> x)
{
	std::vector<std::vector<int>> a;
	int n = x.size();
	int m = x[0].size();
	int i, j;
	long long res = 0;
	elem e;
	vector<int> neg(n, 0), pos(n, 0);
	vector<int> neg_idx(n), pos_idx(n);
	vector<pair<int, int> > p(n);
	std::vector<std::vector<int>> answer;
	for (i = 0; i < n; i++) {
		std::vector<int> row(m, -1);
		answer.push_back(row);
		a.push_back(row);
	}
	for(i=0; i<n; i++)
		for (j = 0; j < k; j++) {
			a[i][j] = -1;
			neg[i]++;
			res -= x[i][j];
		}
	priority_queue<elem> pq;
	for (i = 0; i < n; i++) {
		e.row = i;
		e.colm = k - 1;
		e.colM = m - 1;
		e.val = x[i][k - 1] + x[i][m - 1];
		pq.push(e);
	}
	for (i = 0; i < n*k / 2; i++) {
		e = pq.top();
		pq.pop();
		res += e.val;
		a[e.row][e.colm] = 0;
		a[e.row][e.colM] = 1;
		if (e.colm - 1 >= 0) {
			e.colm--;
			e.colM--;
			e.val = x[e.row][e.colm] + x[e.row][e.colM];
			pq.push(e);
		}
	}
	for (i = 0; i < n; i++)
		for (j = 0; j < m; j++)
			if (a[i][j] < 0)
				neg[i]++;
			else if (a[i][j] > 0)
				pos[i]++;
	for (i = 0; i < n; i++) {
		neg_idx[i] = -1;
		pos_idx[i] = m;
	}
	for (i = 0; i < k; i++) {
		for (j = 0; j < n; j++) {
			p[j].first = pos[j];
			p[j].second = j;
		}
		sort(p.begin(), p.end());
		for (j = 0; j < n / 2; j++) {
			neg_idx[p[j].second]++;
			answer[p[j].second][neg_idx[p[j].second]] = i;
			neg[p[j].second]--;
		}
		for (j = n / 2; j < n; j++) {
			pos_idx[p[j].second]--;
			answer[p[j].second][pos_idx[p[j].second]] = i;
			pos[p[j].second]--;
		}
	}
/*	cerr << "a=\n";
	for (i = 0; i < n; i++) {
		for (j = 0; j < m; j++)
			cerr << a[i][j] << ' ';
		cerr << endl;
	}
	*/
	allocate_tickets(answer);
	return res;
}
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |