| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
|---|---|---|---|---|---|---|---|
| 1320577 | ezzzay | Unscrambling a Messy Bug (IOI16_messy) | C++20 | 0 ms | 0 KiB |
#include "messy.h"
#include<bits/stdc++.h>
using namespace std;
#define ff first
#define ss second
#define pb push_back
map<string,bool>mp;
int x=1,y=2;
vector<int> P = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31};
void add_element(string s){
string t;
for(int i=0;i<32;i++)t+='0';
for(int i=0;i<32;i++){
t[P[i]]=s[i];
}
mp[t]=1;
}
bool check_element(string s){return mp[s];}
void compile_set(){
}
std::vector<int> restore_permutation(int n, int w, int r) {
string s;
for(int i=0;i<n;i++)s+='0';
for(int i=0;i<n;i++){
s[i]='1';
add_element(s);
}
compile_set();
vector<bool>fnd(n);
vector<int>p(n);
for(int i=0;i<n;i++){
string s;for(int j=0;j<n;j++)s+='0';
vector<int>vc;
for(int j=0;j<n;j++){
if(fnd[j])s[j]='1';
else vc.pb(j);
}
random_device rd;
mt19937 rng(rd());
shuffle(vc.begin(), vc.end(), rng);
for(auto j:vc){
string t=s;
t[j]='1';
if(check_element(t)){
fnd[j]=1;
p[j]=i;
break;
}
}
}
return p;
}
