Submission #300690

#TimeUsernameProblemLanguageResultExecution timeMemory
300690TemmieCarnival Tickets (IOI20_tickets)C++17
0 / 100
1 ms384 KiB
#include <bits/stdc++.h>

typedef long long ll;
typedef unsigned long long ull;

void allocate_tickets(std::vector <std::vector <int>> s);

struct cmp {
	bool operator()(const std::pair <int, int>& a, const std::pair <int, int>& b) const {
		if (a.first == b.first) return a.second < b.second;
		return a.first > b.first;
	}
};

std::vector <std::pair <int, int>> ptr;
int n, m;

bool mcmp(const int& a, const int& b) {
	return ptr[a].second < ptr[b].second;
}

ull find_maximum(int k, std::vector <std::vector <int>> x) {
	
	n = x.size();
	m = x[0].size();
	for (auto& v : x) {
		std::reverse(v.begin(), v.end());
	}
	ll r = 0;
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < k; j++) {
			r += x[i][j];
		}
	}
	ptr.resize(n, { k - 1, m });
	std::set <std::pair <int, int>, cmp> st;
	for (int i = 0; i < n; i++) {
		st.insert({ - x[i][ptr[i].first] - x[i][ptr[i].second - 1], i });
	}
	for (int i = 0; i < (n * k) >> 1; i++) {
		r += st.begin()->first;
		auto p = *st.begin();
		st.erase(st.begin());
		ptr[p.second].first--;
		ptr[p.second].second--;
		if (ptr[p.second].first < 0) continue;
		st.insert({ - x[i][ptr[i].first] - x[i][ptr[i].second - 1], p.second });
	}
	for (int i = 0; i < n; i++) {
		std::cout << "(" << ptr[i].first << " ; " << ptr[i].second << ")" << std::endl;
	}
	std::vector <std::vector <int>> ans(n, std::vector <int> (m, -1));
	for (int i = 0; i < k; i++) {
		std::vector <int> now(n);
		std::iota(now.begin(), now.end(), 0);
		std::sort(now.begin(), now.end(), mcmp);
		for (int j = 0; j < n >> 1; j++) {
			ans[now[j]][ptr[now[j]].second++] = i;
		}
		for (int j = n >> 1; j < n; j++) {
			ans[now[j]][ptr[now[j]].first--] = i;
		}
	}
	for (auto& v : ans) {
		std::reverse(v.begin(), v.end());
	}
	allocate_tickets(ans);
	return r;
	
}
#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...