제출 #97871

#제출 시각아이디문제언어결과실행 시간메모리
97871MiricaMatei동굴 (IOI13_cave)C++14
0 / 100
352 ms504 KiB
#include <bits/stdc++.h>
#include "cave.h"

const int MAXN = 5005;

int v[MAXN];
int v1[MAXN];
int p[MAXN];
int liber[MAXN];

/*int tryCombination(int* v, int n) {
  for (int i = 0; i < n; ++i)
    printf("%d ", v[i]);
  printf("\n");
  int x;
  scanf("%d", &x);
  return x;
}

void answer(int* v, int* p, int n) {
  for (int i = 0; i < n; ++i)
    printf("%d ", v[i]);
  printf("\n");
  for (int i = 0; i < n; ++i)
    printf("%d ", p[i]);
  printf("\n");
}*/

void exploreCave(int N) {
  int disp = N;
  for (int i = 1; i <= N; ++i)
    liber[i] = i - 1;
  for (int i = 0; i < N; ++i) {
    for (int j = 1; j <= disp; ++j)
      v[liber[j]] = 0;
    int value = 1;
    if (tryCombination(v) >= i)
      value = 0;
    for (int j = 1; j <= disp; ++j)
      v[liber[j]] = value;
    int l = 1, r = disp, last = 1;
    while (l <= r) {
      int mid = (l + r) / 2;
      for (int j = mid + 1; j <= r; ++j)
        v[liber[j]] = value ^ 1;
      if (tryCombination(v) >= i) {
        last = mid;
        r = mid - 1;
      } else {
        for (int j = 1; j <= mid; ++j)
          v[liber[j]] = value ^ 1;
        for (int j = mid + 1; j <= r; ++j)
          v[liber[j]] = value;
        l = mid + 1;
      }
    }
    v1[i] = value;
    p[i] = liber[last];
    for (int i = last; i <= disp - 1; ++i)
      liber[i] = liber[i + 1];
    disp--;
  }
  answer(v1, p);
}

/*int main() {
  int n;
  scanf("%d", &n);
  exploreCave(n);
  return 0;
}*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...