Submission #1137646

#TimeUsernameProblemLanguageResultExecution timeMemory
1137646jerzykUnscrambling a Messy Bug (IOI16_messy)C++20
100 / 100
2 ms584 KiB
#include <bits/stdc++.h>
#include "messy.h"

using namespace std;
#define pb push_back
#define st first
#define nd second
typedef long long ll;
typedef long double ld;
const int N = 1024;
int wh[N];
string curq;

inline void S(int p, int k, char z)
{
    for(int i = p; i <= k; ++i)
        curq[i] = z;
}

void DoQ(int p, int k)
{
    if(p == k) return;
    int s = (p + k) / 2;
    for(int i = p; i <= s; ++i)
    {
        curq[i] = '1';
        add_element(curq);
        curq[i] = '0';
    }
    S(s + 1, k, '1');
    DoQ(p, s);
    S(s + 1, k, '0');
    S(p, s, '1');
    DoQ(s + 1, k);
    S(p, s, '0');
}

void S2(vector<int> &v, char z)
{
    for(int i = 0; i < (int)v.size(); ++i)
        curq[v[i]] = z;
}

void Rev(int p, int k, vector<int> pos)
{
    if(p == k)
    {
        wh[p] = pos[0];
        return;
    }
    vector<int> l, r;
    int s = (p + k) / 2;
    for(int i = 0; i < (int)pos.size(); ++i)
    {
        curq[pos[i]] = '1';
        if(check_element(curq))
            l.pb(pos[i]);
        else
            r.pb(pos[i]);
        curq[pos[i]] = '0';
    }
    pos.clear();
    S2(r, '1');
    Rev(p, s, l);
    S2(r, '0');
    S2(l, '1');
    Rev(s + 1, k, r);
    S2(l, '0');
}

vector<int> restore_permutation(int _n, int _w, int _r)
{
    int n = _n;
    vector<int> ans(n, 0), pos;
    for(int i = 0; i < n; ++i)
    {
        pos.pb(i);
        curq.pb('0');
    }
    DoQ(0, n - 1);
    compile_set();
    Rev(0, n - 1, pos);
    for(int i = 0; i < n; ++i)
        ans[wh[i]] = i;
    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...