답안 #960083

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
960083 2024-04-09T15:46:48 Z LucaLucaM Unscrambling a Messy Bug (IOI16_messy) C++17
100 / 100
2 ms 604 KB
#include <vector>
#include <set>
#include <iostream>
#include <fstream>

#include "messy.h"

bool exista(std::string s) {
  return check_element(s);
}

void change (char &c) {
  c = (c == '0'? '1' : '0');
}

std::set<int> where[8];

std::vector<int> restore_permutation(int n, int w, int r) {
  int logN = std::__lg(n);
  std::vector<int> made;

  for(int i = 0; i < logN; i++) {
    std::string s(n, '0');
    for (const auto &index : made) {
      s[index] = '1';
    }

    if(i == logN - 1) {
      s = std::string(n, '1');
    }

    for(int j = 0; j < n; j++) {
      if((j >> i) & 1) {
        change(s[j]);
        add_element(s);
        change(s[j]);
        made.push_back(j);
      }
    }
  }

  compile_set();
  made.clear();

  for(int i = 0; i < logN; i++) {
    std::string s(n, '0');
    for (const auto &index : made) {
      s[index] = '1';
    }

    if(i == logN - 1) {
      s = std::string(n, '1');
    }

    for(int j = 0; j < n; j++) {
      change(s[j]);
      if(exista(s)) {
        where[i].insert(j);
        made.push_back(j);
      }
      change(s[j]);
    }
  }

  std::vector<int> p(n, 0);
  for(int i = 0; i < n; i++) {
    for(int j = 0; j < logN; j++)
      if(where[j].count(i))
        p[i] |= (1 << j);
  }

  return p;
}

/**

4 16 16
2 1 3 0

**/
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB n = 8
2 Correct 0 ms 348 KB n = 8
3 Correct 0 ms 604 KB n = 8
4 Correct 0 ms 348 KB n = 8
5 Correct 0 ms 348 KB n = 8
6 Correct 1 ms 348 KB n = 8
7 Correct 0 ms 348 KB n = 8
8 Correct 1 ms 344 KB n = 8
9 Correct 0 ms 348 KB n = 8
10 Correct 1 ms 348 KB n = 8
11 Correct 1 ms 348 KB n = 8
12 Correct 0 ms 348 KB n = 8
13 Correct 0 ms 348 KB n = 8
14 Correct 0 ms 348 KB n = 8
15 Correct 0 ms 432 KB n = 8
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 344 KB n = 32
2 Correct 0 ms 348 KB n = 32
3 Correct 0 ms 348 KB n = 32
4 Correct 1 ms 344 KB n = 32
5 Correct 0 ms 344 KB n = 32
6 Correct 1 ms 348 KB n = 32
7 Correct 1 ms 600 KB n = 32
8 Correct 1 ms 348 KB n = 32
9 Correct 1 ms 348 KB n = 32
10 Correct 1 ms 348 KB n = 32
11 Correct 0 ms 348 KB n = 32
12 Correct 0 ms 348 KB n = 32
13 Correct 0 ms 348 KB n = 32
14 Correct 1 ms 344 KB n = 32
15 Correct 1 ms 344 KB n = 32
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB n = 32
2 Correct 1 ms 348 KB n = 32
3 Correct 0 ms 348 KB n = 32
4 Correct 0 ms 348 KB n = 32
5 Correct 0 ms 348 KB n = 32
6 Correct 0 ms 348 KB n = 32
7 Correct 0 ms 348 KB n = 32
8 Correct 1 ms 348 KB n = 32
9 Correct 1 ms 348 KB n = 32
10 Correct 1 ms 348 KB n = 32
11 Correct 1 ms 344 KB n = 32
12 Correct 1 ms 344 KB n = 32
13 Correct 0 ms 348 KB n = 32
14 Correct 1 ms 348 KB n = 32
15 Correct 0 ms 348 KB n = 32
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 604 KB n = 128
2 Correct 1 ms 432 KB n = 128
3 Correct 1 ms 604 KB n = 128
4 Correct 1 ms 432 KB n = 128
5 Correct 1 ms 604 KB n = 128
6 Correct 1 ms 604 KB n = 128
7 Correct 1 ms 604 KB n = 128
8 Correct 1 ms 604 KB n = 128
9 Correct 1 ms 604 KB n = 128
10 Correct 1 ms 604 KB n = 128
11 Correct 1 ms 600 KB n = 128
12 Correct 1 ms 604 KB n = 128
13 Correct 1 ms 604 KB n = 128
14 Correct 1 ms 604 KB n = 128
15 Correct 1 ms 604 KB n = 128
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 604 KB n = 128
2 Correct 2 ms 604 KB n = 128
3 Correct 2 ms 436 KB n = 128
4 Correct 1 ms 604 KB n = 128
5 Correct 1 ms 600 KB n = 128
6 Correct 2 ms 604 KB n = 128
7 Correct 1 ms 600 KB n = 128
8 Correct 2 ms 436 KB n = 128
9 Correct 1 ms 604 KB n = 128
10 Correct 1 ms 604 KB n = 128
11 Correct 2 ms 600 KB n = 128
12 Correct 2 ms 604 KB n = 128
13 Correct 2 ms 604 KB n = 128
14 Correct 1 ms 600 KB n = 128
15 Correct 2 ms 604 KB n = 128