Submission #899454

# Submission time Handle Problem Language Result Execution time Memory
899454 2024-01-06T08:20:50 Z rajkon cmp (balkan11_cmp) C++14
100 / 100
1300 ms 107136 KB
#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 time Memory Grader output
1 Correct 1300 ms 107136 KB Output is correct - maxAccess = 10, score = 100