# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
594731 | TimDee | 자동 인형 (IOI18_doll) | C++14 | 0 ms | 0 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "doll.h"
#include <bits/stdc++.h>
using namespace std;
void create_circuit(int m, vector<int>&a) {
int n=a.size();
if (m==1) {
int size=1;
while ((size<<1)<n) size<<=1;
vector<int> x(2*size-1), y(2*size-1), state(2*size-1,0), c = {1, -1};
for (int i=1; i<=size-1; ++i) {
x[i-1] = -(2*i);
y[i-1] = -(2*i+1);
}
for (int i=size-1; i<2*size-1; ++i) x[i]=1;
int cnt=0, p=0;
while (cnt<size) {
if (p>=size-1) {
if (cnt+size<n-1) y[p]=1;
else y[p]=-1;
++cnt;
p=0;
continue;
}
if (!state[p]) {
state[p]^=1;
p<<=1;
} else {
state[p]^=1;
p<<=1; ++p;
}
}
y[2*size-2]=0;
answer(c,x,y);
} else {
vector<int> c(n+1);
c[0]=a[0];
for (int i=1; i<n; ++i) {
c[a[i-1]]=a[i];
}
c[a[n-1]]=0;
vector<int> x(0), y(0);
answer(c,x,y);
}
}