제출 #1163619

#제출 시각아이디문제언어결과실행 시간메모리
1163619irmuun자동 인형 (IOI18_doll)C++20
37 / 100
109 ms14432 KiB
#include "doll.h" #include <bits/stdc++.h> using namespace std; #define ll long long #define pb push_back #define ff first #define ss second #define all(s) s.begin(),s.end() #define rall(s) s.rbegin(),s.rend() void create_circuit(int M,vector<int>A) { int N=A.size(); vector<int>C(M+1); fill(all(C),-1); vector<int>X(4*N,0),Y(4*N,0); int len=0; vector<int>row={1}; while(row.size()*2<=N){ vector<int>vec; for(int i:row){ X[i]=-(2*i); Y[i]=-(2*i+1); vec.pb(2*i); vec.pb(2*i+1); } row=vec; } for(int i:row){ X[i]=-(2*i); Y[i]=-(2*i+1); } vector<int>ord; vector<bool>dir(2*X.size(),true); int cur=1; while(ord.size()<2*row.size()){ if(X[cur]==0){ ord.pb(cur); cur=1; continue; } if(dir[cur]){ dir[cur]=false; cur=-X[cur]; } else{ dir[cur]=true; cur=-Y[cur]; } } for(int i=0;i<N;i++){ if(ord[i]%2==0) X[ord[i]/2]=A[i]; else Y[ord[i]/2]=A[i]; } for(int i=N;i<ord.size();i++){ if(ord[i]%2==0) X[ord[i]/2]=-1; else Y[ord[i]/2]=-1; } Y[ord.size()-1]=0; X.resize(row.size()*2); Y.resize(row.size()*2); X.erase(X.begin()); Y.erase(Y.begin()); answer(C,X,Y); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...