Submission #1215933

#TimeUsernameProblemLanguageResultExecution timeMemory
1215933banganPrisoner Challenge (IOI22_prison)C++20
0 / 100
0 ms328 KiB
#include "prison.h"
#include <bits/stdc++.h>
using namespace std;

const int X = 21;

void debug(vector<vector<int>> s) {
	int N = s[0].size() - 1;
	cout << "\t";
	for (int i=0; i<=N; i++) cout << i << "\t";
	cout << "\n";
	for (int i=0; i<=X; i++) {
		cout << i << "\t";
		for (int j=0; j<=N; j++) cout << s[i][j] << "\t";
		cout << "\n";
	}
}

int kth(int x, int k) {
	k = 8-k;
	while (k--) x/=2;
	return x%2;
}

int big(int x) {
	int rep = 10;
	while (rep--) x/=2;
	return x;
	// return x>>9;
}

std::vector<std::vector<int>> devise_strategy(int N) {
	cout << big(5000) << endl;
	vector s(X+1, vector<int>(N+1));
	s[0][0] = 0;
	for (int i=17; i<=X; i++) s[i][0] = 1;
	for (int i=1; i<=16; i++) {
		int b = i-1;
		b = (b - b%2) / 2;
		s[i][0] = b%2;
	}
	for (int i=1; i<=N; i++) s[0][i] = 17 + big(i);
	for (int i=17; i<=X; i++) for (int j=1; j<=N; j++) {
		if (i-17 < big(j)) s[i][j] = -1;
		else if (i-17 == big(j)) s[i][j] = kth(j, 0) + 1;
		else if (i-17 > big(j)) s[i][j] = -2;
	}
	for (int i=1; i<=16; i++) for (int j=1; j<=N; j++) {
		int b = i-1;
		int r = b%2;
		b = (b-r) / 2;
		if (r < kth(j, b)) s[i][j] = -(1-s[i][0]+1);
		else if (r == kth(j, b)) s[i][j] = 2*(b+1) + kth(j, b+1) + 1;
		else if (r > kth(j, b)) s[i][j] = -(s[i][0]+1);
		if (b == 7 && r == kth(j, b)) {
			if (kth(j, b+1) == 0) s[i][j] = -(s[i][0]+1);
			else s[i][j] = -(1-s[i][0]+1);
		} 
	}
	return s;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...