Submission #384374

#TimeUsernameProblemLanguageResultExecution timeMemory
384374patrikpavic2Xoractive (IZhO19_xoractive)C++17
88 / 100
6 ms620 KiB
#include "interactive.h" #include <vector> #include <cstdio> #include <algorithm> #define PB push_back using namespace std; typedef vector < int > vi; vi razlika(vi &A, vi &B){ int i = 0, j = 0; vi ret; for(;i < (int)A.size() || j < (int)B.size();){ if(i == (int)A.size() || (j < (int)B.size() && B[j] < A[i])) ret.PB(B[j++]); else if(j == (int)B.size() || (i < (int)A.size() && B[j] > A[i])) ret.PB(A[i++]); else i++, j++; } return ret; } vi presjek(vi &A, vi &B){ int i = 0, j = 0; vi ret; for(;i < (int)A.size() && j < (int)B.size();){ if(B[j] < A[i]) j++; else if(B[j] > A[i]) i++; else ret.PB(A[i++]), j++; } return ret; } int jen; vi saznaj(vi pos){ if((int)pos.size() == 0) return {}; vi A, B, C, ret; A = get_pairwise_xor(pos); pos.PB(1); B = get_pairwise_xor(pos); C = razlika(A, B); for(int i = 1;i < (int)C.size();i += 2) ret.PB(C[i] ^ jen); sort(ret.begin(), ret.end()); return ret; } vi B[2][10], svi; vi guess(int n) { // printf("TU SAM\n"); vi ans; jen = ask(1); for(int i = 2;i <= n;i++) svi.PB(i); svi = saznaj(svi); for(int i = 0;i < 7;i++){ vi Q; for(int j = 2;j <= n;j++){ if(j & (1 << i)) Q.PB(j); } B[1][i] = saznaj(Q); B[0][i] = razlika(svi, B[1][i]); } // printf("TU SAM n = %d\n", n); ans.PB(jen); for(int i = 2;i <= n;i++){ vi cur = svi; for(int j = 0;j < 7;j++){ // printf("pozivam presjek\n"); cur = presjek(cur, B[!!(i & (1 << j))][j]); // printf("gotov presjek\n"); } //printf("i = %d cur = %d\n", i, (int)cur.size()); int ja = cur[0]; ans.PB(ja); vi pos; pos.PB(ja); //printf("A[ %d ] = %d\n", i, ja); for(int j = 0;j < 7;j++){ B[!!(i & (1 << j))][j] = razlika(B[!!(i & (1 << j))][j], pos); } } return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...