제출 #1234153

#제출 시각아이디문제언어결과실행 시간메모리
1234153repsakPrisoner Challenge (IOI22_prison)C++20
0 / 100
0 ms328 KiB
#include "prison.h" #include <bits/stdc++.h> using namespace std; int back(int response, int bagN, int bagIsA){ int val = response >> 3; int index = response % 8; int nInt = (bagN >> (7 - index)) % 4; if(val != nInt){ if(bagIsA && val > nInt) return -1; if(!bagIsA && val < nInt) return -1; return -2; // return val > nInt ? -2 : -1; //knows answer (might be opposite) } //get index + 1 bit int newIndex = index + 1; string nIndex = to_string(newIndex); while(nIndex.size() < 3){ nIndex = "0" + nIndex; } string baseThree = ""; while(bagN > 0){ baseThree = to_string(bagN % 3) + baseThree; bagN /= 3; } // convert binary string to int char base3Val = int(newIndex) >= int(baseThree.size()) ? '0' : baseThree[newIndex]; string inBinary = base3Val + nIndex; string realBinary = ""; bool hasBeenOne = false; for(int i = 0; i < inBinary.size(); i++){ if(!hasBeenOne){ if(inBinary[i] == '0'){ continue; }else{ hasBeenOne = true; } } realBinary += inBinary[i]; } if(realBinary.size() == 0) realBinary = "0"; // int toBinary = stoi(inBinary, nullptr, 2); int toBinary = 0; // int toBinary = stoi(realBinary); int bit = 1; for(int i = realBinary.size() - 1; i >= 0; i--){ int binaryDigit = realBinary[i] - '0'; toBinary += bit * binaryDigit; bit *= 2; } return toBinary; } vector<vector<int>> devise_strategy(int N) { int X = 23; vector<vector<int>> ans; for(int i = 0; i <= X; i++){ vector<int> row(N + 1); row[0] = i % 2; for(int j = 1; j <= N; j++){ if(i == 6 && j == 2 || i == 7 && j == 2){ cout << " here\n"; } row[j] = back(i, j, 1 - row[0]); } ans.push_back(row); } return ans; } // #include "grader.cpp"
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...