Submission #236894

#TimeUsernameProblemLanguageResultExecution timeMemory
236894DanShadersHokej (COCI17_hokej)C++17
48 / 120
173 ms10808 KiB
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
using namespace std;
using namespace __gnu_pbds;

#define all(x) begin(x), end(x)
#define x first
#define y second
typedef long long ll;
typedef long double ld;

template<typename T>
using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;

template<typename T>
using normal_queue = priority_queue<T, vector<T>, greater<T>>;

const int MAX_N = 5e5 + 10;

vector<pair<int, pair<int, int>>> ans;
int endAt[6];
int current[6];
int id[6];
pair<int, pair<int, int>> players[MAX_N];

signed main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	int m, n;
	cin >> m >> n;
	for (int i = 0; i < n; ++i)
		cin >> players[i].x >> players[i].y.x, players[i].y.y = i;
	sort(all(players));
	reverse(all(players));
	int ptr = 0;
	int64_t res = 0;
	for (int i = 0; i < m; ++i) {
		for (int j = 0; j < 6; ++j) {
			if (endAt[j] != i)
				continue;
			assert(ptr != n);
			endAt[j] = players[ptr].y.x + i;
			ans.push_back({i, {id[j] + 1, players[ptr].y.y + 1}});
			current[j] = players[ptr].x;
			id[j] = players[ptr].y.y;
			++ptr;
		}
		res += accumulate(current, current + 6, 0ll);
	}
	cout << res << "\n";
	int last = 1;
	for (auto p : ans) {
		if (p.x == 0) {
			cout << p.y.y << " ";
			continue;
		}
		if (last) {
			cout << "\n" << ans.size() - 6 << "\n";
		}
		cout << p.x << " " << p.y.x << " " << p.y.y << "\n";
		last = 0;
	}
	if (last)
		cout << "\n0";
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...