이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "bits/stdc++.h"
#include "messy.h"
using namespace std;
const int sz = 256;
vector<string> qry;
int an[sz];
int n;
void gen_qry(int le, int ri) {
int mi = le + (ri - le) / 2;
string p(le - 1, '1');
string s(n - ri, '1');
string b(mi - le + 1, '0');
string f(ri - mi, '0');
for (int i = le; i <= mi; i ++) {
b[i - le] = '1';
qry.push_back(p + b + f + s);
b[i - le] = '0';
}
if (le == ri) return;
gen_qry(le, mi);
gen_qry(mi + 1, ri);
}
void solve(int le, int ri, vector<int> bl) {
int mi = le + (ri - le) / 2;
string s(n, '0');
for (int ix : bl)
s[ix] = '1';
vector<int> ls;
for (int i = 0; i < n; i ++)
if ('0' == s[i]) {
s[i] = '1';
bool f = check_element(s);
if (!f) bl.push_back(i);
else ls.push_back(i);
s[i] = '0';
}
if (le == ri) {
an[ls.back()] = le - 1;
return;
}
solve(le, mi, bl);
int m = mi - le + 1;
for (int i = 0; i < m; i ++) bl.pop_back();
for (int ix : ls) bl.push_back(ix);
solve(mi + 1, ri, bl);
}
vector<int> restore_permutation(int N, int w, int r) {
n = N;
gen_qry(1, n);
for (auto s : qry)
add_element(s);
compile_set();
solve(1, n, {});
vector<int> p;
for (int i = 0; i < n; i ++)
p.push_back(an[i]);
return p;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |