Submission #1320735

#TimeUsernameProblemLanguageResultExecution timeMemory
1320735mansurPrisoner Challenge (IOI22_prison)C++20
80 / 100
7 ms1080 KiB
#include "prison.h"
#include <bits/stdc++.h>

using namespace std;

int bt(int x, int k) {
	while (k--) x /= 3;
	return x % 3;
}

vector<vector<int>> devise_strategy(int N) {	
	int k = 7;
	vector<vector<int>> ans(k * 3 + 2, vector<int> (N + 1));
	ans[0][0] = 0;
	for (int i = 1; i <= N; i++) 	
		ans[0][i] = bt(i, k) + 1;
	for (int i = 1; i <= k * 3 + 1; i++) {                                              
		int b = k - (i - 1) / 3, v = (i - 1) % 3;
		if (!b) v = 1;                                    
		if ((k - b) & 1) {
			ans[i][0] = 0;
			for (int j = 1; j <= N; j++) {
				int v1 = bt(j, b);
				if (v1 > v) ans[i][j] = -2;
				else if (v1 < v) ans[i][j] = -1;
				else if (b) {
					if (b == 1) {
						if (j % 3 == 2) ans[i][j] = -2;
						else if (j % 3 == 0) ans[i][j] = -1;
						else ans[i][j] = k * 3 + 1;
						continue;
					}
					v1 = bt(j, b - 1);
					ans[i][j] = (k + 1 - b) * 3 + v1 + 1; 
				}
			}
			continue;
		}
		ans[i][0] = 1;
		for (int j = 1; j <= N; j++) {
			int v1 = bt(j, b);
			if (v1 > v) ans[i][j] = -1;
			else if (v1 < v) ans[i][j] = -2;
			else if (b) {
				if (b == 1) {
					if (j % 3 == 2) ans[i][j] = -1;
					else if (j % 3 == 0) ans[i][j] = -2;
					else ans[i][j] = k * 3 + 1;
					continue;
				}
				v1 = bt(j, b - 1);
				ans[i][j] = (k + 1 - b) * 3 + v1 + 1; 
			}
		}
	}
	cerr << "JJ";
	return ans;
}
               
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...