#include <vector>
#include "messy.h"
#include <bits/stdc++.h>
using namespace std;
int k = 0;
vector<int> perm;
void recurse(string s, int l, int r){
if(l==r)return;
for(int i = l;i<=(l+r)/2;i++){
s[i]='1';
//cout << s << '\n';
k++;
add_element(s);
s[i]='0';
}
for(int i = l;i<=(l+r)/2;i++){
s[i]='1';
}
recurse(s, (l+r)/2+1, r);
for(int i = l;i<=(l+r)/2;i++){
s[i]='0';
}
for(int i = (l+r)/2+1;i<=r;i++){
s[i]='1';
}
recurse(s, l, (l+r)/2);
}
void recursefind(int l, int r, vector<int> known, string s){
//cout << l << ' ' << r << ' ' << s << ' ';
//for(auto thing:known)cout << thing << ' ' ;
//cout << '\n';
if(l==r){
perm[l]=known.back();
return;
}
vector<int> left, right;
for(auto thing:known){
s[thing]='1';
bool t = check_element(s);
s[thing]='0';
if(t){
left.push_back(thing);
}
else right.push_back(thing);
}
for(auto thing:right){
s[thing]='1';
}
recursefind(l, (l+r)/2, left, s);
for(auto thing:right)s[thing]='0';
for(auto thing:left)s[thing]='1';
recursefind((l+r)/2+1, r, right, s);
}
vector<int> restore_permutation(int n, int w, int r) {
string s;
perm.resize(n);
for(int i = 0;i<n;i++){
s.push_back('0');
}
recurse(s, 0, n-1);
compile_set();
s="";
vector<int> known;
for(int i = 0;i<n;i++){
s.push_back('0');
known.push_back(i);
}
recursefind(0, n-1, known, s);
vector<int> rpe(n);
for(int i = 0;i<n;i++){
rpe[perm[i]]=i;
}
return rpe;
}
컴파일 시 표준 에러 (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 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... |