Submission #295941

# Submission time Handle Problem Language Result Execution time Memory
295941 2020-09-10T06:26:34 Z erd1 Unscrambling a Messy Bug (IOI16_messy) C++14
100 / 100
3 ms 616 KB
#include "messy.h"

#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define all(x) (x).begin(), (x).end()

template<typename It>
ostream& outIt(ostream& out, It b, It e){
  for(It i = b; i != e; i++)
    out << (i == b?"":" ") << *i;
  return out;
}

template<typename T>
ostream& operator<<(ostream& out, vector<T> v){
  return outIt(out << '[', all(v)) << ']';
}

vector<int> solve1(int n){
  string s(n, '0');
  for(int i = 0; i < n-1; i++){
    s[i] = '1';
    add_element(s);
  }
  compile_set();
  string cur(n, '0');
  vector<int> ans(n);
  for(int i = 0; i < n; i++)
    for(int j = 0; j < n; j++){
      if(cur[j] == '1')continue;
      cur[j] = '1';
      if(i == n-1 || check_element(cur)){
        //cout << i << " " << j << endl;
        ans[j] = i; break;
      }
      cur[j] = '0';
    }
  //for(auto i: ans)cout << i << " ";cout << endl;
  return ans;
}

void add(string& s, int i){ assert(s[i] != '1'); s[i] = '1'; add_element(s), s[i] = '0'; }
bool ask(string& s, int i){ assert(s[i] != '1'); s[i] = '1'; bool ans = check_element(s); return s[i] = '0', ans; }

vector<int> solve2(int n){
  string s0(n, '0'), s1(n, '0');
  for(int i = 0; i < __lg(n); i++){
    for(int j = 0; j < n; j++)
      if(j&(1<<i))add(j<<1&1<<i?s1:s0, j);
    fill(all(s0), '0'); fill(all(s1), '0');
    for(int j = 0; j < n; j++)
      (j&(1<<i)?s0:s1)[j] = '1';
  }
  compile_set();
  fill(all(s0), '0'); fill(all(s1), '0');
  vector<int> ans(n);
  for(int i = 0; i < __lg(n); i++){
    for(int j = 0; j < n; j++)
        ans[j] |= ask(ans[j]<<1&1<<i?s1:s0, j)<<i;
    fill(all(s0), '0'); fill(all(s1), '0');
    for(int j = 0; j < n; j++)
      (ans[j]&(1<<i)?s0:s1)[j] = '1';
  }
  return ans;
}

vector<int> restore_permutation(int n, int w, int r) {
  //if(r <= n*n)return solve1(n);
  return solve2(n);
}
# Verdict Execution time Memory Grader output
1 Correct 0 ms 256 KB n = 8
2 Correct 0 ms 384 KB n = 8
3 Correct 0 ms 256 KB n = 8
4 Correct 0 ms 256 KB n = 8
5 Correct 1 ms 256 KB n = 8
6 Correct 1 ms 256 KB n = 8
7 Correct 0 ms 256 KB n = 8
8 Correct 1 ms 256 KB n = 8
9 Correct 1 ms 384 KB n = 8
10 Correct 1 ms 256 KB n = 8
11 Correct 2 ms 256 KB n = 8
12 Correct 1 ms 256 KB n = 8
13 Correct 1 ms 384 KB n = 8
14 Correct 1 ms 256 KB n = 8
15 Correct 1 ms 256 KB n = 8
# Verdict Execution time Memory Grader output
1 Correct 1 ms 384 KB n = 32
2 Correct 2 ms 384 KB n = 32
3 Correct 3 ms 384 KB n = 32
4 Correct 2 ms 384 KB n = 32
5 Correct 2 ms 384 KB n = 32
6 Correct 1 ms 384 KB n = 32
7 Correct 1 ms 384 KB n = 32
8 Correct 1 ms 384 KB n = 32
9 Correct 1 ms 384 KB n = 32
10 Correct 1 ms 384 KB n = 32
11 Correct 1 ms 384 KB n = 32
12 Correct 0 ms 384 KB n = 32
13 Correct 1 ms 384 KB n = 32
14 Correct 1 ms 384 KB n = 32
15 Correct 2 ms 384 KB n = 32
# Verdict Execution time Memory Grader output
1 Correct 1 ms 384 KB n = 32
2 Correct 1 ms 360 KB n = 32
3 Correct 1 ms 384 KB n = 32
4 Correct 1 ms 384 KB n = 32
5 Correct 1 ms 384 KB n = 32
6 Correct 1 ms 384 KB n = 32
7 Correct 1 ms 384 KB n = 32
8 Correct 1 ms 384 KB n = 32
9 Correct 1 ms 384 KB n = 32
10 Correct 1 ms 384 KB n = 32
11 Correct 1 ms 384 KB n = 32
12 Correct 1 ms 384 KB n = 32
13 Correct 1 ms 384 KB n = 32
14 Correct 1 ms 384 KB n = 32
15 Correct 1 ms 384 KB n = 32
# Verdict Execution time Memory Grader output
1 Correct 2 ms 512 KB n = 128
2 Correct 2 ms 512 KB n = 128
3 Correct 2 ms 512 KB n = 128
4 Correct 2 ms 512 KB n = 128
5 Correct 2 ms 512 KB n = 128
6 Correct 2 ms 512 KB n = 128
7 Correct 2 ms 616 KB n = 128
8 Correct 2 ms 512 KB n = 128
9 Correct 2 ms 512 KB n = 128
10 Correct 2 ms 512 KB n = 128
11 Correct 2 ms 512 KB n = 128
12 Correct 2 ms 512 KB n = 128
13 Correct 2 ms 512 KB n = 128
14 Correct 2 ms 512 KB n = 128
15 Correct 2 ms 512 KB n = 128
# Verdict Execution time Memory Grader output
1 Correct 2 ms 512 KB n = 128
2 Correct 2 ms 512 KB n = 128
3 Correct 2 ms 512 KB n = 128
4 Correct 2 ms 512 KB n = 128
5 Correct 3 ms 512 KB n = 128
6 Correct 2 ms 488 KB n = 128
7 Correct 2 ms 512 KB n = 128
8 Correct 3 ms 512 KB n = 128
9 Correct 2 ms 512 KB n = 128
10 Correct 3 ms 512 KB n = 128
11 Correct 2 ms 512 KB n = 128
12 Correct 2 ms 512 KB n = 128
13 Correct 2 ms 512 KB n = 128
14 Correct 2 ms 512 KB n = 128
15 Correct 2 ms 512 KB n = 128