Submission #1140152

#TimeUsernameProblemLanguageResultExecution timeMemory
1140152gygUnscrambling a Messy Bug (IOI16_messy)C++20
49 / 100
2 ms584 KiB
#include "messy.h"
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define arr array 
#define vec vector
#define str string
const int N = 40;

int n, lg;

bool on(int x, int i) { return x & (1 << i); }
int flp(int x, int i) { return x ^ (1 << i); }
str prf(int x, int i) {
    str ans = "";
    for (int j = 0; j <= i; j++) {
        if (on(x, j)) ans += "1";
        else ans += "0";
    }
    return ans;
}
void ins(vec<int> x) {
    str y = "";
    for (int i = 0; i < n; i++) y += "0";
    for (int i : x) y[i] = '1';
    add_element(y);
}
bool qry(vec<int> x) {
    str y = "";
    for (int i = 0; i < n; i++) y += "0";
    for (int i : x) y[i] = '1';
    return check_element(y);
}

void enc() {
    for (int i = 0; i < lg; i++) {
        for (int x = 0; x < n; x++) {
            if (!on(x, i)) continue;
            vec<int> in = {x};
            if (i != 0) {
                str rq = prf(x, i - 1);
                rq.back() = (rq.back() == '1') ? '0' : '1';
                for (int y = 0; y < n; y++)
                    if (prf(y, i - 1) == rq) in.push_back(y);
            }
            ins(in);
        }
    }
}

arr<int, N> frm;
void dcd() {
    for (int i = 0; i < lg; i++) {
        for (int x = 0; x < n; x++) {
            vec<int> in = {x};
            if (i != 0) {
                str rq = prf(frm[x], i - 1);
                rq.back() = (rq.back() == '1') ? '0' : '1';
                for (int y = 0; y < n; y++)
                    if (prf(frm[y], i - 1) == rq) in.push_back(y);
            }
            bool rsp = qry(in);
            if (rsp) frm[x] = flp(frm[x], i);
        }
    }
}

vec<signed> restore_permutation(signed _n, signed _w, signed _r) {
    n = _n, lg = roundl(log2l(n));

    enc();
    compile_set();
    dcd();

    vec<signed> ans;
    for (int x = 0; x < n; x++) ans.push_back(frm[x]);
    return ans;
}

Compilation message (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...