Submission #373228

# Submission time Handle Problem Language Result Execution time Memory
373228 2021-03-03T21:42:42 Z jainbot27 Unscrambling a Messy Bug (IOI16_messy) C++17
100 / 100
3 ms 512 KB
#include <bits/stdc++.h>
#include "messy.h"
using namespace std;

#define f first
#define s second
#define pb push_back
#define ar array
#define all(x) x.begin(), x.end()
#define siz(x) (int)x.size()

#define FOR(x, y, z) for(int x = (y); x < (z); x++)
#define ROF(x, z, y) for(int x = (y-1); x >= (z); x--)
#define F0R(x, z) FOR(x, 0, z)
#define R0F(x, z) ROF(x, 0, z)
#define trav(x, y) for(auto&x:y)

using ll = long long;
using vi = vector<int>;
using vl = vector<long long>;
using pii = pair<int, int>;
using vpii = vector<pair<int, int>>;

template<class T> inline bool ckmin(T&a, T b) {return b < a ? a = b, 1 : 0;}
template<class T> inline bool ckmax(T&a, T b) {return b > a ? a = b, 1 : 0;}
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

const char nl = '\n';
const int mxN = 2e5 + 10;
const int MOD = 1e9 + 7;
const long long infLL = 1e18;

int n;
vi ans;

void go(int l, int r){
    if(r-l==0) return;
    string chk(n, '0');
    F0R(i, l) chk[i] = '1';
    FOR(i, r+1, n) chk[i] = '1';
    int m = (l+r)/2;
    FOR(i, l, m+1){
        chk[i] = '1';
        add_element(chk);
        chk[i] = '0';
    }
    go(l, m); go(m+1, r);
}

void solve(int l, int r, set<int> pos){
    if(siz(pos)==1){
        assert(l==r);
        ans[*pos.begin()] = r;
        return;
    }
    string chk(n, '0');
    F0R(i, n) if(!pos.count(i)) chk[i] = '1';
    int m = (l+r)/2;
    set<int> posnewL;
    set<int> posnewR;
    trav(x, pos){
        chk[x] = '1';
        if(check_element(chk)) posnewL.insert(x);
        chk[x] = '0';
    }
    trav(x, pos){
        if(!posnewL.count(x)) posnewR.insert(x);
    }
    solve(l, m, posnewL); solve(m+1, r, posnewR);
}

vi restore_permutation(int _n, int w=69, int r=69){
    n = _n;
    go(0, n-1);
    compile_set();
    set<int> o; F0R(i, n) o.insert(i);
    ans = vi(n);
    solve(0, n-1, o);
    return ans;
}
# Verdict Execution time Memory Grader output
1 Correct 1 ms 364 KB n = 8
2 Correct 0 ms 364 KB n = 8
3 Correct 1 ms 364 KB n = 8
4 Correct 0 ms 364 KB n = 8
5 Correct 0 ms 364 KB n = 8
6 Correct 0 ms 364 KB n = 8
7 Correct 1 ms 364 KB n = 8
8 Correct 0 ms 364 KB n = 8
9 Correct 1 ms 364 KB n = 8
10 Correct 0 ms 364 KB n = 8
11 Correct 1 ms 364 KB n = 8
12 Correct 1 ms 364 KB n = 8
13 Correct 0 ms 364 KB n = 8
14 Correct 1 ms 364 KB n = 8
15 Correct 1 ms 364 KB n = 8
# Verdict Execution time Memory Grader output
1 Correct 1 ms 364 KB n = 32
2 Correct 1 ms 364 KB n = 32
3 Correct 1 ms 364 KB n = 32
4 Correct 1 ms 364 KB n = 32
5 Correct 1 ms 364 KB n = 32
6 Correct 1 ms 384 KB n = 32
7 Correct 1 ms 364 KB n = 32
8 Correct 1 ms 364 KB n = 32
9 Correct 1 ms 364 KB n = 32
10 Correct 1 ms 364 KB n = 32
11 Correct 1 ms 364 KB n = 32
12 Correct 1 ms 364 KB n = 32
13 Correct 1 ms 364 KB n = 32
14 Correct 1 ms 364 KB n = 32
15 Correct 1 ms 512 KB n = 32
# Verdict Execution time Memory Grader output
1 Correct 1 ms 364 KB n = 32
2 Correct 1 ms 364 KB n = 32
3 Correct 1 ms 364 KB n = 32
4 Correct 1 ms 364 KB n = 32
5 Correct 1 ms 364 KB n = 32
6 Correct 1 ms 364 KB n = 32
7 Correct 1 ms 364 KB n = 32
8 Correct 1 ms 384 KB n = 32
9 Correct 1 ms 364 KB n = 32
10 Correct 1 ms 364 KB n = 32
11 Correct 1 ms 364 KB n = 32
12 Correct 1 ms 364 KB n = 32
13 Correct 1 ms 364 KB n = 32
14 Correct 1 ms 364 KB n = 32
15 Correct 1 ms 364 KB n = 32
# Verdict Execution time Memory Grader output
1 Correct 2 ms 492 KB n = 128
2 Correct 2 ms 492 KB n = 128
3 Correct 2 ms 492 KB n = 128
4 Correct 2 ms 492 KB n = 128
5 Correct 2 ms 492 KB n = 128
6 Correct 2 ms 492 KB n = 128
7 Correct 2 ms 492 KB n = 128
8 Correct 2 ms 492 KB n = 128
9 Correct 2 ms 492 KB n = 128
10 Correct 3 ms 492 KB n = 128
11 Correct 2 ms 492 KB n = 128
12 Correct 2 ms 492 KB n = 128
13 Correct 2 ms 492 KB n = 128
14 Correct 2 ms 492 KB n = 128
15 Correct 2 ms 492 KB n = 128
# Verdict Execution time Memory Grader output
1 Correct 2 ms 492 KB n = 128
2 Correct 2 ms 492 KB n = 128
3 Correct 2 ms 492 KB n = 128
4 Correct 3 ms 492 KB n = 128
5 Correct 2 ms 492 KB n = 128
6 Correct 2 ms 492 KB n = 128
7 Correct 2 ms 492 KB n = 128
8 Correct 2 ms 492 KB n = 128
9 Correct 2 ms 492 KB n = 128
10 Correct 2 ms 492 KB n = 128
11 Correct 2 ms 492 KB n = 128
12 Correct 3 ms 492 KB n = 128
13 Correct 3 ms 492 KB n = 128
14 Correct 2 ms 492 KB n = 128
15 Correct 2 ms 492 KB n = 128