Submission #1058234

#TimeUsernameProblemLanguageResultExecution timeMemory
1058234parsadox2Prisoner Challenge (IOI22_prison)C++17
10 / 100
4 ms740 KiB
#include <bits/stdc++.h>
#include "prison.h"

using namespace std;

const int Lg = 7;

char int_to_char(int x)
{
	if(x == 0)
		return '0';
	else if(x == 1)
		return '1';
	else
		return '2';
}

int char_to_int(char c)
{
	if(c == '0')
		return 0;
	else if(c == '1')
		return 1;
	else		
		return 2;
}

string int_to_ter(int x)
{
	string s = "";
	for(int i = 0 ; i < Lg ; i++)
	{
		s.push_back(int_to_char(x % 3));
		x /= 3;
	}
	return s;
}

vector<vector<int>>  devise_strategy(int n)
{
	vector <vector<int>> res;
	for(int i = 0 ; i <= 20 ; i++)
	{
		vector <int> vec(n + 1 , 0);
		res.push_back(vec);
	}
	for(int i = 0 ; i <= 20 ; i++)
	{
		if(i == 0)
		{
			res[i][0] = 0;
			for(int j = 1 ; j <= n ; j++)
			{
				string s = int_to_ter(j);
				res[i][j] = 3 * 6 + char_to_int(s[6]);
			}
			continue;
		}
		int bit = i / 3 , val = i % 3;
		if(bit % 2 == 0)
			res[i][0] = 1;
		else
			res[i][0] = 0;
		for(int j = 1 ; j <= n ; j++)
		{
			string s = int_to_ter(j);
			int v = char_to_int(s[bit]);
			if(v != val)
			{
				if(val > v)
				{
					if(res[i][0] == 0)
						res[i][j] = -1;
					else
						res[i][j] = -2;
				}
				else
				{
					if(res[i][0] == 0)
						res[i][j] = -2;
					else
						res[i][j] = -1;
				}
			}
			else
			{
				if(bit == 0)
					continue;
				v = char_to_int(s[bit - 1]);
				if(bit == 1 && v == 0)
				{
					res[i][j] = -1;
					continue;
				}
				res[i][j] = 3 * (bit - 1) + v;
			}
		}
	}
	return res;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...