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...