Submission #1204928

#TimeUsernameProblemLanguageResultExecution timeMemory
1204928banganCarnival Tickets (IOI20_tickets)C++20
27 / 100
329 ms52788 KiB
#include "tickets.h"
#include <vector>
#include <bits/stdc++.h>

using i64 = long long;

long long find_maximum(int k, std::vector<std::vector<int>> x) {
	int n = x.size();
	int m = x[0].size();

	i64 S = 0;
	std::vector<int> l(n, 0), r(n, m - 1);
	std::vector ans(n, std::vector<int>(m, -1));

	for (int round = 0; round < k; round++) {
		for (int i = 0; i < n; i++) {
			ans[i][l[i]] = round;
			S -= x[i][l[i]++];
		}
		
		std::vector<int> ord(n);
		iota(ord.begin(), ord.end(), 0);
		std::sort(ord.begin(), ord.end(), [&](int i, int j) {
			return x[i][l[i] - 1] + x[i][r[i]] > x[j][l[j] - 1] + x[j][r[j]];
		});
		ord.resize(n / 2);
	
		for (int i : ord) {
			S += x[i][--l[i]] + x[i][r[i]];
			ans[i][l[i]] = -1;
			ans[i][r[i]--] = round;
		}
	}

	allocate_tickets(ans);
	return S;
}
#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...