Submission #1271960

#TimeUsernameProblemLanguageResultExecution timeMemory
1271960BlockOGCarnival Tickets (IOI20_tickets)C++20
100 / 100
620 ms125156 KiB
#include "tickets.h"
#include <bits/stdc++.h>

// mrrrow meeow :3
// go play vivid/stasis now! https://vividstasis.gay

#define fo(i, a, b) for(auto i = (a); i < (b); i++)
#define pb push_back
#define f first
#define s second
#define be(a) a.begin(), a.end()
using namespace std;

int sum[1500], f[1500], b[1500];

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

	vector<pair<long long, pair<int, int>>> V;

	long long ans = 0;
	vector<vector<pair<long long, int>>> d2(n);
	fo(i, 0, n) fo(j, 0, m) d2[i].pb({d[i][j], j});

	fo(i, 0, n) {
		sort(be(d2[i]));
		fo(j, 0, k) V.pb({d2[i][m-1-j].f + d2[i][k-1-j].f, {i, j}}), ans -= d2[i][j].f;
	}
	sort(be(V), [](pair<long long, pair<int, int>> a, pair<long long, pair<int, int>> b) { return a.f != b.f ? a.f > b.f : a.s < b.s; });

	fo(i, 0, n * k / 2) ans += V[i].f, sum[V[i].s.f] = V[i].s.s + 1;

	vector<vector<int>> res(n, vector<int>(m, -1));
	fo(i, 0, k) {
		vector<pair<int, int>> v;
		fo(j, 0, n) v.pb({sum[j], j});
		sort(be(v));

		fo(j, 0, n / 2) res[v[j].s][d2[v[j].s][  f[v[j].s]  ].s] = i, f[v[j].s]++;
		fo(j, n / 2, n) res[v[j].s][d2[v[j].s][m-b[v[j].s]-1].s] = i, b[v[j].s]++, sum[v[j].s]--;
	}

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