Submission #858548

#TimeUsernameProblemLanguageResultExecution timeMemory
858548HubertLPrisoner Challenge (IOI22_prison)C++17
80 / 100
35 ms1188 KiB
#include <bits/stdc++.h> using namespace std; //author: Hubert Lukasik int state_to_board[28] = {-10, 1, 2, 3, 4, 5, 6, 7, -10, -10, -10, 8, 9, 10, 11, 12, 13, 14, 15, -10, -10, 16, 17, 18, 19, 20, 21, 22}; int board_to_state[23] = {-1, 1, 2, 3, 4, 5, 6, 7, 11, 12, 13, 14, 15, 16, 17, 18, 21, 22, 23, 24, 25, 26, 27}; int trenary(int x, int which_digit) { string res = ""; while(x > 0) { res = char('0' + x % 3) + res; x = x / 3; } while(res.length() < 8) res = '0' + res; return int(res[which_digit - 1] - '0'); } vector<vector<int>> devise_strategy(int N) { vector<vector<int>> ans; vector <int> pom; for(int i = 0; i < N+1; ++i) pom.push_back(-10); for(int i = 0; i <= 22; ++i) { ans.push_back(pom); } //column 0 for(int i = 0; i <= 7; ++i) ans[i][0] = i % 2; for(int i = 8; i <= 22; ++i) ans[i][0] = (i % 2 + 1) % 2; //row 0 ans[0][1] = -1; ans[0][N] = -2; for(int n = 2; n < N; ++n) ans[0][n] = state_to_board[trenary(n, 1)*10 + 1]; //the rest of rows for(int r = 1; r <= 22; ++r) { if(ans[r][0] == 0) { ans[r][1] = -1; ans[r][N] = -2; } else { ans[r][1] = -2; ans[r][N] = -1; } int prev_pos = board_to_state[r] % 10; int prev_digit = board_to_state[r] / 10; for(int n = 2; n < N; ++n) { int digit = trenary(n, prev_pos); if(digit < prev_digit) { if(ans[r][0] == 0) ans[r][n] = -1; else ans[r][n] = -2; } else if(digit > prev_digit) { if(ans[r][0] == 0) ans[r][n] = -2; else ans[r][n] = -1; } else { int act_digit = trenary(n, prev_pos + 1); int state = 10 * act_digit + prev_pos + 1; if(state == 8) { if(ans[r][0] == 0) ans[r][n] = -1; else ans[r][n] = -2; } else if(state == 28) { if(ans[r][0] == 0) ans[r][n] = -2; else ans[r][n] = -1; } else ans[r][n] = state_to_board[state]; } } } return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...