Submission #1066361

#TimeUsernameProblemLanguageResultExecution timeMemory
1066361j_vdd16Prisoner Challenge (IOI22_prison)C++17
65 / 100
8 ms1116 KiB
#include "prison.h" #include <algorithm> #include <bitset> #include <cstdint> #include <cstring> #include <iostream> #include <limits.h> #include <math.h> #include <map> #include <numeric> #include <queue> #include <set> #include <stack> #include <string> #include <vector> //#define int long long #define loop(X, N) for(int X = 0; X < (N); X++) #define all(V) V.begin(), V.end() #define rall(V) V.rbegin(), V.rend() using namespace std; typedef vector<int> vi; typedef vector<vi> vvi; typedef pair<int, int> ii; typedef vector<ii> vii; typedef vector<vector<ii>> vvii; typedef vector<bool> vb; typedef vector<vector<bool>> vvb; vvi devise_strategy(int N) { //13 + 4 + 4 //13: //4: index of next bit to search in A //4: highest set bit in first bag //5000 * 13 * 13 // int pow3[9] = { 1, 3, 9, 27, 81, 243, 729, 2187, 6561}; vvi out(25, vi(N + 1)); loop(num, 25) { if (num == 0) { out[num][0] = 0; for (int value = 1; value <= N; value++) { if (value < pow3[7]) { out[num][value] = 7 + 1; } else if (value < 2 * pow3[7]) { out[num][value] = 7 + 8 + 1; } else { out[num][value] = 7 + 2 * 8 + 1; } } continue; } int exp = (num - 1) % 8; int player = exp % 2; out[num][0] = player; int bit3 = (num - 1) / 8; for (int value = 1; value <= N; value++) { if ((value % pow3[exp + 1]) < pow3[exp]) { if (bit3 > 0) { out[num][value] = -1 - player; continue; } } else if ((value % pow3[exp + 1]) < 2 * pow3[exp]) { if (bit3 > 1) { out[num][value] = -1 - player; continue; } if (bit3 < 1) { out[num][value] = -1 - (1 - player); continue; } } else { if (bit3 > 2) { out[num][value] = -1 - player; continue; } if (bit3 < 2) { out[num][value] = -1 - (1 - player); continue; } } if (exp == 0) { out[num][value] = 0; continue; } if ((value % pow3[exp]) < pow3[exp - 1]) { out[num][value] = exp - 1 + 0 * 8 + 1; } else if ((value % pow3[exp]) < 2 * pow3[exp - 1]) { out[num][value] = exp - 1 + 1 * 8 + 1; } else { out[num][value] = exp - 1 + 2 * 8 + 1; } } } return out; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...