Submission #1136843

#TimeUsernameProblemLanguageResultExecution timeMemory
1136843alterioUnscrambling a Messy Bug (IOI16_messy)C++20
70 / 100
1 ms584 KiB
#include "messy.h"
#include <bits/stdc++.h>

using namespace std;

vector<int> restore_permutation(int n, int w, int r) {
    int m = log2(n);
    string s = "";
    for (int i = 0; i < n; i++) s.push_back('0');
    s[0] = '1';
    add_element(s);
    for (int i = 0; i < n; i++) s[i] = '1';
    s[1] = '0';
    add_element(s);
    for (int i = 0; i < n; i++) s[i] = '0';
    s[0] = s[1] = '1';
    for (int i = 2; i < m; i++) {
        s[i] = '1';
        add_element(s);
    }
    for (int i = m; i < n; i++) {
        int l = 0, r = n;
        for (int j = 0; j < n; j++) s[j] = '0';
        s[i] = '1';
        for (int j = 0; j < m; j++) {
            if ((1 << j) & i) {
                s[j] = '1';
                add_element(s);
                s[j] = '0';
            }
        }
    }
    compile_set();
    for (int i = 0; i < n; i++) s[i] = '0';
    int pos[m];
    bool found[n];
    memset(found, 0, sizeof(found));
    vector<int> ans(n);
    for (int i = 0; i < n; i++) {
        s[i] = '1';
        if (check_element(s)) {
            found[i] = 1;
            pos[0] = i;
            ans[i] = 0;
            break;
        }
        s[i] = '0';
    }
    for (int i = 0; i < n; i++) s[i] = '1';
    for (int i = 0; i < n; i++) {
        if (found[i]) continue;
        s[i] = '0';
        if (check_element(s)) {
            found[i] = 1;
            pos[1] = i;
            ans[i] = 1;
            break;
        }
        s[i] = '1';
    }
    for (int i = 0; i < n; i++) s[i] = '0';
    for (int i = 0; i < 2; i++) s[pos[i]] = '1';
    for (int dig = 2; dig < m; dig++) {
        for (int i = 0; i < n; i++) {
            if (s[i] == '1') continue;
            s[i] = '1';
            if (check_element(s)) {
                pos[dig] = i;
                found[i] = 1;
                ans[i] = dig; 
                break;
            }
            s[i] = '0';
        }
    }
    for (int i = 0; i < n; i++) s[i] = '0';
    for (int i = 0; i < n; i++) {
        if (found[i]) continue;
        for (int j = 0; j < n; j++) s[j] = '0';
        s[i] = '1';
        int location = 0;
        for (int j = 0; j < m; j++) {
            s[pos[j]] = '1';
            if (check_element(s)) location += (1 << j);
            s[pos[j]] = '0';
        }
        ans[i] = location;
    }
    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...