Submission #1203398

#TimeUsernameProblemLanguageResultExecution timeMemory
1203398HappyCapybaraPrisoner Challenge (IOI22_prison)C++17
0 / 100
3 ms1092 KiB
#include "prison.h" #include<bits/stdc++.h> using namespace std; vector<vector<int>> s, idx; vector<int> k = {3, 3, 3, 3, 3, 2, 2, 1}, v = {0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 6, 6, 7}, w = {1, 4, 7, 10, 13, 16, 18, 20}; void doidx(int l, int r, int d){ if (d > 7) return; int step = (r-l-1)/k[d]; idx[l][d] = -1; idx[r][d] = -2; for (int j=0; j<k[d]; j++){ for (int i=0; i<step; i++) idx[l+1+j*step+i][d] = j; doidx(l+1+j*step, l+1+(j+1)*step-1, d+1); } } vector<vector<int>> devise_strategy(int N){ s.resize(21, vector<int>(N+1, 0)); idx.resize(5589, vector<int>(8, 0)); doidx(1, 5588, 0); s[0][0] = 0; s[0][1] = -1; for (int i=2; i<=N; i++) s[0][i] = idx[i][0]+1; for (int i=1; i<=20; i++){ int d = v[i-1], val = i-w[d]; s[i][0] = (d+1)%2; for (int j=1; j<=N; j++){ if (idx[j][d] == -1) s[i][j] = -(s[i][0]+1); else if (idx[j][d] == -2) s[i][j] = s[i][0]-2; else if (idx[j][d] < val) s[i][j] = -(s[i][0]+1); else if (idx[j][d] > val) s[i][j] = s[i][0]-2; else if (d != 7){ if (idx[j][d+1] == -1) s[i][j] = -(s[i][0]+1); else if (idx[j][d+1] == -2) s[i][j] = s[i][0]-2; else s[i][j] = w[d+1]+idx[j][d+1]; } } } return s; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...