Submission #1232047

#TimeUsernameProblemLanguageResultExecution timeMemory
1232047RakhimovAmir죄수들의 도전 (IOI22_prison)C++20
65 / 100
7 ms1364 KiB
#include "prison.h"

#include <bits/stdc++.h>
using namespace std;

vector<vector<int>> devise_strategy(int N) {
	vector<vector<int>> v;
	int cnt = 1, nw = 0, MX = 12;
	vector<pair<int, int>> num;
	vector<vector<int>> put;
	vector<int> which;
	which.push_back(0);
	num.push_back({0, 0});
	put.resize(MX + 1);
	for (int i = MX; i >= 1; i--) {
		num.push_back({i, 0});
		put[i].push_back(num.size() - 1);
		num.push_back({i, 1});
		put[i].push_back(num.size() - 1);
		which.push_back(nw);
		which.push_back(nw);
		nw ^= 1;
	}
	v.resize(num.size());
	v[0].push_back(0);
	// cout << "0 ";
	for (int i = 1; i <= N; i++) {
		if (i == 0) {
			v[0].push_back(-2);
			continue;
		}
		v[0].push_back(((i & (1 << MX)) > 0) + 1);
		// cout << v[0].back() << " ";
	}
	// cout << "\n";
	for (int i = 1; i < num.size(); i++) {
		int get = num[i].second, ff = num[i].first;
		// cout << "kers " << num[i].first << " " << num[i].second << "\n";
		v[i].push_back(which[i] ^ 1);
		// cout << v[i][0] << " ";
		for (int j = 1; j <= N; j++) {
			if (j == N) {
				v[i].push_back(-((which[i]) + 1));
				continue;
			}
			int bit = ((j & (1 << ff)) > 0);
			if ((bit < get)) {
				v[i].push_back(-((which[i] ^ 1) + 1));
			} else if (bit > get) {
				v[i].push_back(-((which[i]) + 1));
			} else {
				if (ff > 1)
					v[i].push_back(put[(ff - 1)][(((1 << (ff - 1)) & j) > 0)]);
				if (ff == 0)
					v[i].push_back(-1);
				if (ff == 1) {
					if ((((1 << (ff - 1)) & j) > 0))
						v[i].push_back(-((which[i]) + 1));
					else
						v[i].push_back(-((which[i] ^ 1) + 1));
				}
			}
			// cout << v[i].back() << " ";
		}
		// cout << "\n";
	}
	return v;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...