Submission #1322241

#TimeUsernameProblemLanguageResultExecution timeMemory
1322241Rainmaker2627Unscrambling a Messy Bug (IOI16_messy)C++20
100 / 100
1 ms568 KiB
#include "messy.h"
#include <bits/stdc++.h>
using namespace std;

int N;
void do_add(int l, int r, string s) {
    if (l>=r) return;

    int mid=(l+r)/2;
    string lstr(N, '1'), rstr(N, '1');
    for (int i = l; i <= mid; i++) lstr[i]='0';
    for (int i = mid+1; i <= r; i++) {
        s[i]='1';
        add_element(s);
        s[i]=rstr[i]='0';
    }

    do_add(mid+1, r, rstr);
    do_add(l, mid, lstr);
}

vector<int> p;
void do_check(int l, int r, string s) {
    if (l>=r) {
        if (l==r) {
            for (int i = 0; i < N; i++) if (s[i]=='0') p[i]=l;
        } return;
    }

    int mid=(l+r)/2;
    string lstr(N, '1'), rstr(N, '1');
    for (int i = 0; i < N; i++) {
        if (s[i]=='1') lstr[i]=rstr[i]='1';
        if (s[i]=='0') {
            s[i]='1';
            if (check_element(s)) lstr[i]='1', rstr[i]='0';
            else rstr[i]='1', lstr[i]='0';
            s[i]='0';
        }
    }

    do_check(mid+1, r, rstr);
    do_check(l, mid, lstr);
}

std::vector<int> restore_permutation(int n, int w, int r) {
    N=n;
    string s(n, '0');
    do_add(0, n-1, s);

    compile_set();

    p.assign(n, 0);
    s.assign(n, '0');
    do_check(0, n-1, s);

    return p;
}

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...