# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1065635 | Hectorungo_18 | Aliens (IOI16_aliens) | C++14 | 0 ms | 0 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
// #include "messy.h"
using namespace std;
mt19937 gnd(time(nullptr));
// #define int long long
void ch(string& s, int pos, char c){
s[pos]=c;
return;
}
vector<int> restore_permutation(int n, int w, int r){
int mxb = 6;
int bb = 0;
int aux = n;
while(aux > 1){
bb++;
aux/=2;
}
mxb = bb-1;
cout << mxb << endl;
string s (n, '0');
char u = '1', c = '0';
for(int bi = mxb; bi >= 0 ; bi--){
if(bi == mxb){
for(int i = n/2; i < n; i++){
ch(s, i, u);
add_element(s);
ch(s, i, c);
}
}
else{
for(int i = 0; i < (1<<(bi+1)); i++){
ch(s, i, u);
}
for(int i = n/2+(1<<bi); i < n; i+=(1<<(bi+1))){
for(int j = i; j < i+(1<<(bi)); j++){
ch(s, j, u);
add_element(s);
ch(s, j, c);
}
}
for(int i = 0; i < (1<<(bi+1)); i++){
ch(s, i, c);
}
for(int i = n/2; i < n/2+(1<<(bi+1)); i++){
ch(s, i, u);
}
for(int i = (1<<bi); i < n/2; i+=(1<<(bi+1))){
for(int j = i; j < i+(1<<(bi)); j++){
ch(s, j, u);
add_element(s);
ch(s, j, c);
}
}
for(int i = n/2; i < n/2+(1<<(bi+1)); i++){
ch(s, i, c);
}
}
}
compile_set();
vector<int> ans(n, 0);
set<int> fh, sh;
vector<int> ffh, ssh;
for(int bi = mxb; bi >= 0; bi--){
if(bi == mxb){
for(int i = 0; i < n; i++){
ch(s, i, u);
int a = check_element(s);
ch(s, i, c);
if(a){
ans[i]+=(1<<bi);
sh.insert(i);
ssh.push_back(i);
}
else{
fh.insert(i);
ffh.push_back(i);
}
}
}
else{
set<int> aux = sh;
for(auto x : fh){
ch(s, x, u);
}
for(auto x : ssh){
ch(s, x, u);
int a = check_element(s);
ch(s, x, c);
if(a){
if(sh.count(x)) sh.erase(x);
ans[x]+=(1<<bi);
}
// else{
// }
}
for(auto x : fh){
ch(s, x, c);
}
for(auto x : aux){
ch(s, x, u);
}
for(auto x : ffh){
ch(s, x, u);
int a = check_element(s);
ch(s, x, c);
if(a){
if(fh.count(x)) fh.erase(x);
ans[x]+=(1<<bi);
}
}
for(auto x : aux){
ch(s, x, c);
}
}
}
return ans;
}