Submission #660869

#TimeUsernameProblemLanguageResultExecution timeMemory
660869mychecksedadPrisoner Challenge (IOI22_prison)C++17
0 / 100
1 ms212 KiB
#include <bits/stdc++.h>
using namespace std;
int k = 3, p[10];
std::vector<std::vector<int>> devise_strategy(int n){
	p[0] = 1;
	for(int i = 1; i <= 9; ++i) p[i] = p[i - 1] * 3;
	vector<vector<int>> v(23);
	for(int i = 0; i <= 22; ++i) v[i].resize(n+1);
	v[0][0] = 0;
	for(int i = 1; i <= 22; ++i) v[i][0] = (((i-1)/3)%2 ? 0 : 1);
	for(int i = 1; i <= n; ++i){
		v[0][i] = (i / p[7]) + 1;
	}
	for(int i = 1; i <= 22; ++i){
		for(int j = 1; j <= n; ++j){
			if(i==22){
				if(j%3 == 0) v[i][j] = -2;
				else v[i][j] = -1;
				continue;
			}
			int x = (i - 1) / 3;
			int val = (i - 1) % 3;
			int D = (j % p[8 - x]) / p[7 - x];
			if(x == 6){
				int d = j % p[7 - x];
				int divisor = p[6 - x];
				if(d/divisor == 0) v[i][j] = -2;
				else if(d/divisor == 2) v[i][j] = -1;
				else v[i][j] = 22;
			}else if(x % 2){
				if(D != val){
					v[i][j] = (D < val ? -1 : -2);
				}else{
					if(x == 7) v[i][j] = -2;
					else{
						int d = j % p[7 - x];
						int divisor = p[6 - x];
						v[i][j] = d / divisor + (x * 3 + 4);
					}	
				}
			}else{
				if(D != val){
					v[i][j] = (D < val ? -2 : -1);
				}else{
					if(x == 7) v[i][j] = -2;
					else{
						int d = j % p[7 - x];
						int divisor = p[6 - x];
						v[i][j] = d / divisor + (x * 3 + 4);
					}
				}
			}
		}
	}

	return v;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...