Submission #550252

# Submission time Handle Problem Language Result Execution time Memory
550252 2022-04-17T17:31:33 Z jesus_coconut Carnival Tickets (IOI20_tickets) C++17
27 / 100
694 ms 62924 KB
#include "tickets.h"
#include <bits/stdc++.h>
#define all(a) begin(a), end(a)
#define F first
#define S second
using namespace std;

using ll = long long;

vector<vector<int>> tickets;
vector<pair<int, int>> points;

long long find_maximum(int k, std::vector<std::vector<int>> x) {
	int n = size(x);
	int m = size(x[0]);
	ll ret = 0;
	tickets.resize(n, vector<int>(m, -1));
	points.resize(n, {0, m - 1});
	vector<vector<int>> sxidx(n, vector<int>(m));
	for (int i = 0; i < n; ++i) {
		iota(all(sxidx[i]), 0);
		sort(all(sxidx[i]), [&](int a, int b) {
			return x[i][a] > x[i][b];
		});
	}
	vector<int> idx(n);
	iota(all(idx), 0);
	for (int i = 0; i < k; ++i) {
		sort(all(idx), [&](int a, int b) {
			return x[a][sxidx[a][points[a].S]] > x[b][sxidx[b][points[b].S]];
		});
		ll mx = -1;
		int mxid = -1;
		int need = n / 2;
		for (int j = 0; j < n; ++j) {
			ll cur = 0;
			need = n / 2;
			priority_queue<int> pq;
			for (int l = 0; l < n; ++l) {
				if (x[idx[l]][sxidx[idx[l]][points[idx[l]].S]] > x[idx[j]][sxidx[idx[j]][sxidx[idx[j]][points[idx[j]].S]]]) {
					cur += x[idx[l]][sxidx[idx[l]][points[idx[l]].F]];
					need--;
				} else if (x[idx[l]][sxidx[idx[l]][points[idx[l]].F]] < x[idx[j]][sxidx[idx[j]][points[idx[j]].S]]) {
					cur -= x[idx[l]][sxidx[idx[l]][points[idx[l]].S]];
				} else {
					cur -= x[idx[l]][sxidx[idx[l]][points[idx[l]].S]];
					pq.push(x[idx[l]][sxidx[idx[l]][points[idx[l]].F]] + x[idx[l]][sxidx[idx[l]][points[idx[l]].S]]);
				}
			}
			if (need < 0) continue;
			while (need != 0 && !pq.empty()) {
				cur += pq.top();
				pq.pop();
				need--;
			}
			if (need != 0) continue;
			if (cur > mx) {
				mx = cur;
				mxid = j;
			}
		}
		ret += mx;
		need = n / 2;
		priority_queue<pair<int, int>> pq;
		for (int l = 0; l < n; ++l) {
			if (x[idx[l]][sxidx[idx[l]][points[idx[l]].S]] > x[idx[mxid]][sxidx[idx[mxid]][points[idx[mxid]].S]]) {
				tickets[idx[l]][sxidx[idx[l]][points[idx[l]].F]] = i;
				points[idx[l]].F++;
				need--;
			} else if (x[idx[l]][sxidx[idx[l]][points[idx[l]].F]] < x[idx[mxid]][sxidx[idx[mxid]][points[idx[mxid]].S]]) {
				tickets[idx[l]][sxidx[idx[l]][points[idx[l]].S]] = i;
				points[idx[l]].S--;
			} else {
				pq.push({x[idx[l]][sxidx[idx[l]][points[idx[l]].F]] + x[idx[l]][sxidx[idx[l]][points[idx[l]].S]], l});
			}
		}
		while (need != 0) {
			auto [v, l] = pq.top();
			pq.pop();
			tickets[idx[l]][sxidx[idx[l]][points[idx[l]].F]] = i;
			points[idx[l]].F++;
			need--;
		}
		while (!pq.empty()) {
			auto [v, l] = pq.top();
			pq.pop();
			tickets[idx[l]][sxidx[idx[l]][points[idx[l]].S]] = i;
			points[idx[l]].S--;
		}
	}
	allocate_tickets(tickets);
	return ret;
}
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 1 ms 308 KB Output is correct
5 Correct 1 ms 340 KB Output is correct
6 Correct 17 ms 776 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 3 ms 436 KB Output is correct
5 Correct 25 ms 3540 KB Output is correct
6 Correct 694 ms 62924 KB Output is correct
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 212 KB Contestant returned 5 but the tickets gives a total value of 3
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 1 ms 340 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 1 ms 388 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 1 ms 388 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 1 ms 308 KB Output is correct
5 Correct 1 ms 340 KB Output is correct
6 Correct 17 ms 776 KB Output is correct
7 Correct 1 ms 212 KB Output is correct
8 Correct 1 ms 212 KB Output is correct
9 Correct 1 ms 212 KB Output is correct
10 Correct 3 ms 436 KB Output is correct
11 Correct 25 ms 3540 KB Output is correct
12 Correct 694 ms 62924 KB Output is correct
13 Incorrect 1 ms 212 KB Contestant returned 5 but the tickets gives a total value of 3
14 Halted 0 ms 0 KB -