Submission #899454

#TimeUsernameProblemLanguageResultExecution timeMemory
899454rajkoncmp (balkan11_cmp)C++14
100 / 100
1300 ms107136 KiB
#include "cmp.h" #include <iostream> int offset[6] {1, 4097, 5121, 5377, 5441, 5457}; void remember(int n) { for (int i = 0; i < 6; i++) { int address = (n >> 2*i) + offset[i]; bit_set(address); } } int compare(int b) { int L = 0, R = 6; while (L + 1 < R) { int m = (L + R) / 2; int address = (b >> 2*m) + offset[m]; if (bit_get(address)) R = m; else L = m; } if (L == 0) { if (bit_get(b + 1)) return 0; } int last_d = 3 & (b >> (2*L)); int prefix = (b >> (2*(L+1))) << 2; if (last_d == 0) return -1; if (last_d == 3) return 1; else if (last_d == 1) { if (bit_get(prefix + offset[L])) return 1; else return -1; } else { if (bit_get(prefix+3 + offset[L])) return -1; else return 1; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...