Submission #69502

# Submission time Handle Problem Language Result Execution time Memory
69502 2018-08-21T05:57:45 Z funcsr Unscrambling a Messy Bug (IOI16_messy) C++17
100 / 100
4 ms 512 KB
#include "messy.h"
#include <vector>
#include <iostream>
#include <algorithm>
#include <cassert>
#define rep(i, n) for (int i=0; i<(n); i++)
#define pb push_back
#define INF (1LL<<60)
#define all(x) (x).begin(), (x).end()
#define _1 first
#define _2 second
using namespace std;
int N;
vector<int> ret;
// [l, r)
void prepare(int l, int r) {
  if (r-l == 1) return;
  rep(i, (r-l)/2) {
    string q(N, '1');
    for (int x=l; x<r; x++) q[x] = '0';
    q[l+i] = '1';
    add_element(q);
    //cout<<"!"<<q<<" ["<<l<<","<<r<<")\n";
  }
  prepare(l, (l+r)/2);
  prepare((l+r)/2, r);
}

void solve(vector<int> pos) {
  //cout<<"solve({";for(int x:pos)cout<<x<<",";cout<<"})\n";
  int len = pos.size();
  if (len == 1) {
    ret.pb(pos[0]);
    return;
  }
  vector<int> left, right;
  rep(i, len) {
    string q(N, '1');
    rep(j, len) q[pos[j]] = '0';
    q[pos[i]] = '1';
    //cout<<q<<"?\n";
    if (check_element(q)) left.pb(pos[i]);
    else right.pb(pos[i]);
  }
  assert(left.size() == right.size());
  solve(left);
  solve(right);
}

vector<int> restore_permutation(int NN, int W, int R) {
  N = NN;
  prepare(0, N);
  compile_set();
  vector<int> all;
  rep(i, N) all.pb(i);
  solve(all);
  vector<int> p(N);
  rep(i, N) p[ret[i]] = i;
  return p;
}
# Verdict Execution time Memory Grader output
1 Correct 2 ms 384 KB n = 8
2 Correct 2 ms 384 KB n = 8
3 Correct 2 ms 384 KB n = 8
4 Correct 2 ms 384 KB n = 8
5 Correct 2 ms 256 KB n = 8
6 Correct 2 ms 256 KB n = 8
7 Correct 2 ms 384 KB n = 8
8 Correct 2 ms 384 KB n = 8
9 Correct 2 ms 384 KB n = 8
10 Correct 2 ms 384 KB n = 8
11 Correct 2 ms 384 KB n = 8
12 Correct 2 ms 256 KB n = 8
13 Correct 2 ms 384 KB n = 8
14 Correct 2 ms 384 KB n = 8
15 Correct 2 ms 256 KB n = 8
# Verdict Execution time Memory Grader output
1 Correct 2 ms 384 KB n = 32
2 Correct 2 ms 384 KB n = 32
3 Correct 2 ms 384 KB n = 32
4 Correct 2 ms 384 KB n = 32
5 Correct 2 ms 384 KB n = 32
6 Correct 2 ms 384 KB n = 32
7 Correct 2 ms 384 KB n = 32
8 Correct 2 ms 384 KB n = 32
9 Correct 2 ms 384 KB n = 32
10 Correct 2 ms 256 KB n = 32
11 Correct 2 ms 256 KB n = 32
12 Correct 2 ms 384 KB n = 32
13 Correct 2 ms 384 KB n = 32
14 Correct 2 ms 384 KB n = 32
15 Correct 2 ms 256 KB n = 32
# Verdict Execution time Memory Grader output
1 Correct 2 ms 384 KB n = 32
2 Correct 2 ms 384 KB n = 32
3 Correct 2 ms 384 KB n = 32
4 Correct 2 ms 384 KB n = 32
5 Correct 2 ms 384 KB n = 32
6 Correct 2 ms 384 KB n = 32
7 Correct 2 ms 384 KB n = 32
8 Correct 2 ms 384 KB n = 32
9 Correct 2 ms 384 KB n = 32
10 Correct 2 ms 384 KB n = 32
11 Correct 2 ms 384 KB n = 32
12 Correct 2 ms 384 KB n = 32
13 Correct 2 ms 384 KB n = 32
14 Correct 2 ms 256 KB n = 32
15 Correct 2 ms 384 KB n = 32
# Verdict Execution time Memory Grader output
1 Correct 3 ms 512 KB n = 128
2 Correct 3 ms 512 KB n = 128
3 Correct 3 ms 512 KB n = 128
4 Correct 3 ms 512 KB n = 128
5 Correct 4 ms 512 KB n = 128
6 Correct 3 ms 512 KB n = 128
7 Correct 4 ms 512 KB n = 128
8 Correct 3 ms 512 KB n = 128
9 Correct 3 ms 512 KB n = 128
10 Correct 3 ms 512 KB n = 128
11 Correct 3 ms 512 KB n = 128
12 Correct 3 ms 512 KB n = 128
13 Correct 3 ms 512 KB n = 128
14 Correct 3 ms 512 KB n = 128
15 Correct 3 ms 512 KB n = 128
# Verdict Execution time Memory Grader output
1 Correct 3 ms 512 KB n = 128
2 Correct 3 ms 512 KB n = 128
3 Correct 3 ms 512 KB n = 128
4 Correct 3 ms 512 KB n = 128
5 Correct 4 ms 512 KB n = 128
6 Correct 3 ms 512 KB n = 128
7 Correct 3 ms 512 KB n = 128
8 Correct 3 ms 512 KB n = 128
9 Correct 3 ms 512 KB n = 128
10 Correct 3 ms 512 KB n = 128
11 Correct 3 ms 512 KB n = 128
12 Correct 3 ms 512 KB n = 128
13 Correct 3 ms 512 KB n = 128
14 Correct 3 ms 512 KB n = 128
15 Correct 3 ms 512 KB n = 128