Submission #1196321

#TimeUsernameProblemLanguageResultExecution timeMemory
1196321dostsUnscrambling a Messy Bug (IOI16_messy)C++20
100 / 100
1 ms584 KiB
#include <bits/stdc++.h>
#pragma GCC target("lzcnt,popcnt")
#pragma GCC optimize("O3,unroll-loops")
//#define int long long
#define pii pair<int,int>
#define vi vector<int>
#define ff first
#define ss second
#define all(x) x.begin(),x.end()
#define sp << " " << 
using namespace std;
#include "messy.h"

int nn;
vi ans;

void dnq(int l,int r) {
    if (l == r) return;
    int m = (l+r) >> 1;
    string str(nn,'0');
    for (int i = 0;i<nn;i++) {
        if (i > r || i < l) str[i] = '1';
    }
    for (int i = l;i<=m;i++) {
        str[i] = '1';
        add_element(str);
        str[i] = '0';
    }
    dnq(l,m),dnq(m+1,r);
}

void solve(vi v,int l,int r) {
    if (l == r) {
        assert(!v.empty());
        ans[v.back()] = l;
        return;
    }
    string str(nn,'1');
    for (auto it : v) str[it] = '0';

    vi nxt,nxtt;
    int m = (l+r) >> 1;
    for (auto it : v) {
        str[it] = '1';
        if (check_element(str)) nxt.push_back(it);
        else nxtt.push_back(it);
        str[it] = '0';
    }
    solve(nxt,l,m),solve(nxtt,m+1,r);
}

std::vector<int> restore_permutation(int n, int w, int r) {
    nn = n;
    ans.resize(n);
    vi bts(n);
    iota(all(bts),0ll);
    dnq(0,n-1);
    compile_set();
    solve(bts,0,n-1);
    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...