제출 #1258410

#제출 시각아이디문제언어결과실행 시간메모리
1258410thewizardmanUnscrambling a Messy Bug (IOI16_messy)C++20
100 / 100
1 ms584 KiB
#include "messy.h"
#include <bits/stdc++.h>
using namespace std;

int n, a[128], b[128], c[128];

void dc1(int l1, int r1, int l2, int r2, int k) {
  string s(n, '0');
  int mid = (l1 + r1) / 2;
  for (int i = l2; i < r2; i++) s[i] = '1';
  for (int i = l1; i < mid; i++) {
    s[i] = '1';
    add_element(s);
    a[i] |= (1<<k);
    s[i] = '0';
  }
  if (l1 != mid && mid != r1) {
    dc1(l1, mid, mid, r1, k+1);
    dc1(mid, r1, l1, mid, k+1);
  }
}

void dc2(vector<int> v1, vector<int> v2, int k) {
  string s(n, '0');
  vector<int> v3, v4;
  for (auto i: v2) s[i] = '1';
  for (auto i: v1) {
    s[i] = '1';
    if (check_element(s)) v3.push_back(i), b[i] |= (1<<k);
    else v4.push_back(i);
    s[i] = '0';
  }
  if (v3.size() > 1 && v4.size() > 1) {
    dc2(v3, v4, k+1);
    dc2(v4, v3, k+1);
  }
}

vector<int> restore_permutation(int n, int w, int r) {
  ::n = n;
  dc1(0, n, n, n, 0);
  compile_set();
  vector<int> temp(n), ans(n);
  iota(temp.begin(), temp.end(), 0);
  dc2(temp, vector<int>(), 0);
  for (int i = 0; i < n; i++) c[a[i]] = i;
  for (int i = 0; i < n; i++) ans[i] = c[b[i]];
  return ans;
}

컴파일 시 표준 에러 (stderr) 메시지

messy.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
messy_c.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
#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...