Submission #7496041


Source Code Expand

#include <stdio.h>
#include <stdlib.h>
#define DMAX 36
int compare(const void *a, const void *b);
int lower_bound(int lo, int hi, long long val, long long (*cp)[2]);
int main(void)
{
  int i, j, p, h, d = DMAX;
  long long a, b, x, cur, res = 0, ans = 1LL << DMAX, bmatrix[DMAX], baby[(1LL << (DMAX / 2)) + 1][2];
  scanf("%lld %lld %lld", &a, &b, &x);
  while (d > 0 && !((b >> (d - 1)) & 1)) {
    if (a == x) {
      printf("%lld\n", res);
      return 0;
    }
    if ((x >> (d - 1)) & 1) {
      printf("-1\n");
      return 0;
    }
    if ((a >> (d - 1)) & 1) {
      a = (a / 2) ^ ((a & 1) * b);
      res++;
    }
    d--;
  }
  if (a == x) {
    printf("%lld\n", res);
    return 0;
  }
  h = 1LL << ((d + 1) / 2);
  for (i = 0; i < d; i++) {
    cur = 1LL << i;
    for (j = 0; j < h; j++) {
      cur = (cur / 2) ^ ((cur & 1) * b);
    }
    bmatrix[i] = cur;
  }
  cur = x;
  for (i = 0; i < h; i++) {
    cur = (cur / 2) ^ ((cur & 1) * b);
    baby[i][0] = cur;
    baby[i][1] = i + 1;
  }
  baby[h][0] = baby[h][1] = -1;
  qsort(baby, h + 1, sizeof(long long) * 2, compare);
  cur = a;
  for (i = 0; i < h; i++) {
    long long lans, lcur = 0;
    for (j = 0; j < d; j++) {
      if ((cur >> j) & 1) lcur ^= bmatrix[j];
    }
    p = lower_bound(0, h, lcur + 1, baby) - 1;
    if (baby[p][0] == lcur) {
      lans = (long long)h * (i + 1) - baby[p][1];
      if (ans > lans) ans = lans;
    }
    cur = lcur;
  }
  if (ans == (1LL << DMAX)) printf("-1\n");
  else printf("%lld\n", res + ans);
}

int compare(const void *a, const void *b)
{
  long long *ta = *(long long(*)[2])a, *tb = *(long long(*)[2])b;
  if (ta[0] > tb[0]) return 1;
  else if (ta[0] < tb[0]) return -1;
  else if (ta[1] > tb[1]) return 1;
  else if (ta[1] < tb[1]) return -1;
  else return 0;
}

int lower_bound(int lo, int hi, long long val, long long (*cp)[2]){
  int mid;
  while (hi >= lo) {
    mid = (lo + hi) / 2;
    if (cp[mid][0] >= val) hi = mid - 1;
    else lo = mid + 1;
  }
  return lo;
}

Submission Info

Submission Time
Task K - 乱数調整
User Inoel
Language C (GCC 5.4.1)
Score 300
Code Size 2069 Byte
Status AC
Exec Time 161 ms
Memory 8316 KB

Compile Error

./Main.c: In function ‘main’:
./Main.c:10:3: warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result [-Wunused-result]
   scanf("%lld %lld %lld", &a, &b, &x);
   ^

Judge Result

Set Name Subtask All
Score / Max Score 30 / 30 270 / 270
Status
AC × 20
AC × 63
Set Name Test Cases
Subtask subtask_00.txt, subtask_01.txt, subtask_02.txt, subtask_03.txt, subtask_04.txt, subtask_05.txt, subtask_06.txt, subtask_07.txt, subtask_08.txt, subtask_09.txt, subtask_10.txt, subtask_11.txt, subtask_12.txt, subtask_13.txt, subtask_14.txt, subtask_15.txt, subtask_16.txt, subtask_17.txt, subtask_18.txt, subtask_19.txt
All scrambled_00.txt, scrambled_01.txt, scrambled_02.txt, scrambled_03.txt, scrambled_04.txt, scrambled_05.txt, scrambled_06.txt, scrambled_07.txt, scrambled_08.txt, scrambled_09.txt, scrambled_10.txt, scrambled_11.txt, scrambled_12.txt, scrambled_13.txt, scrambled_14.txt, scrambled_15.txt, scrambled_16.txt, scrambled_17.txt, scrambled_18.txt, scrambled_19.txt, scrambled_20.txt, scrambled_21.txt, scrambled_22.txt, scrambled_23.txt, scrambled_24.txt, scrambled_25.txt, scrambled_26.txt, scrambled_27.txt, scrambled_28.txt, scrambled_29.txt, scrambled_30.txt, scrambled_31.txt, scrambled_32.txt, scrambled_33.txt, scrambled_34.txt, scrambled_35.txt, scrambled_36.txt, scrambled_37.txt, scrambled_38.txt, scrambled_39.txt, scrambled_40.txt, scrambled_41.txt, scrambled_42.txt, subtask_00.txt, subtask_01.txt, subtask_02.txt, subtask_03.txt, subtask_04.txt, subtask_05.txt, subtask_06.txt, subtask_07.txt, subtask_08.txt, subtask_09.txt, subtask_10.txt, subtask_11.txt, subtask_12.txt, subtask_13.txt, subtask_14.txt, subtask_15.txt, subtask_16.txt, subtask_17.txt, subtask_18.txt, subtask_19.txt
Case Name Status Exec Time Memory
scrambled_00.txt AC 1 ms 128 KB
scrambled_01.txt AC 1 ms 128 KB
scrambled_02.txt AC 1 ms 128 KB
scrambled_03.txt AC 1 ms 128 KB
scrambled_04.txt AC 1 ms 128 KB
scrambled_05.txt AC 1 ms 128 KB
scrambled_06.txt AC 1 ms 128 KB
scrambled_07.txt AC 1 ms 252 KB
scrambled_08.txt AC 1 ms 252 KB
scrambled_09.txt AC 1 ms 128 KB
scrambled_10.txt AC 1 ms 252 KB
scrambled_11.txt AC 1 ms 252 KB
scrambled_12.txt AC 1 ms 252 KB
scrambled_13.txt AC 1 ms 128 KB
scrambled_14.txt AC 1 ms 128 KB
scrambled_15.txt AC 74 ms 4988 KB
scrambled_16.txt AC 1 ms 128 KB
scrambled_17.txt AC 1 ms 128 KB
scrambled_18.txt AC 74 ms 5884 KB
scrambled_19.txt AC 75 ms 5884 KB
scrambled_20.txt AC 161 ms 8316 KB
scrambled_21.txt AC 154 ms 8316 KB
scrambled_22.txt AC 157 ms 8316 KB
scrambled_23.txt AC 154 ms 8316 KB
scrambled_24.txt AC 159 ms 8316 KB
scrambled_25.txt AC 73 ms 4860 KB
scrambled_26.txt AC 152 ms 8316 KB
scrambled_27.txt AC 154 ms 8316 KB
scrambled_28.txt AC 1 ms 128 KB
scrambled_29.txt AC 1 ms 128 KB
scrambled_30.txt AC 1 ms 128 KB
scrambled_31.txt AC 1 ms 128 KB
scrambled_32.txt AC 1 ms 128 KB
scrambled_33.txt AC 1 ms 128 KB
scrambled_34.txt AC 1 ms 128 KB
scrambled_35.txt AC 1 ms 252 KB
scrambled_36.txt AC 1 ms 252 KB
scrambled_37.txt AC 1 ms 252 KB
scrambled_38.txt AC 1 ms 252 KB
scrambled_39.txt AC 158 ms 8316 KB
scrambled_40.txt AC 158 ms 8316 KB
scrambled_41.txt AC 159 ms 8316 KB
scrambled_42.txt AC 157 ms 8316 KB
subtask_00.txt AC 1 ms 128 KB
subtask_01.txt AC 1 ms 128 KB
subtask_02.txt AC 1 ms 128 KB
subtask_03.txt AC 1 ms 128 KB
subtask_04.txt AC 1 ms 128 KB
subtask_05.txt AC 1 ms 128 KB
subtask_06.txt AC 1 ms 2176 KB
subtask_07.txt AC 1 ms 128 KB
subtask_08.txt AC 1 ms 128 KB
subtask_09.txt AC 1 ms 128 KB
subtask_10.txt AC 1 ms 128 KB
subtask_11.txt AC 1 ms 128 KB
subtask_12.txt AC 1 ms 128 KB
subtask_13.txt AC 1 ms 128 KB
subtask_14.txt AC 1 ms 128 KB
subtask_15.txt AC 1 ms 128 KB
subtask_16.txt AC 1 ms 128 KB
subtask_17.txt AC 1 ms 128 KB
subtask_18.txt AC 1 ms 128 KB
subtask_19.txt AC 1 ms 128 KB