제출 #97883

#제출 시각아이디문제언어결과실행 시간메모리
97883MiricaMateiCave (IOI13_cave)C++14
100 / 100
557 ms604 KiB
#include <bits/stdc++.h>
#include "cave.h"

using namespace std;

const int MAXN = 5005;

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

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;
    int x = tryCombination(v);
    if (x == -1)
      x = N + 1;
    if (x > i)
      value = 0;
    for (int j = 1; j <= disp; ++j)
      v[liber[j]] = value;
    int l = 1, r = disp;
    while (l < r) {
      int mid = (l + r) / 2;
      for (int j = mid + 1; j <= r; ++j)
        v[liber[j]] = value ^ 1;
      int x = tryCombination(v);
      if (x == -1)
        x = N + 1;
      if (x > i) {
        r = mid;
      } 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;
      }
    }
    v[liber[r]] = value;
    p[liber[r]] = i;
    for (int i = r; i <= disp - 1; ++i)
      liber[i] = liber[i + 1];
    disp--;
  }
  answer(v, p);
}
#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...