제출 #1060462

#제출 시각아이디문제언어결과실행 시간메모리
1060462new_acc자동 인형 (IOI18_doll)C++14
100 / 100
86 ms21676 KiB
#include "doll.h" #include <bits/stdc++.h> using namespace std; typedef vector<int> vi; const int N=1e6+10; int g[N][2],nw[N],val[N]; bool bb[N],usu[N]; void create_circuit(int m, vi a) { a.push_back(0); int n=a.size(),w=1; while(w<n) w*=2; for(int i=1;i<w;i++) g[i][0]=i*2,g[i][1]=i*2+1; int kt=n; for(int i=1;i<=w;i++){ int curr=1; while(curr<w){ bb[curr]^=1; curr=g[curr][bb[curr]]; } int xd=2*w-curr; g[curr][0]=-1,g[curr][1]=-1; if(xd<=n){ val[curr]=a[--kt]; usu[curr]=0; }else usu[curr]=1,val[curr]=-1; } for(int i=w-1;i>=1;i--) if(usu[i*2] and usu[i*2+1]) usu[i]=1; int li=0; for(int i=1;i<w;i++){ if(!usu[i]){ nw[i]=++li; } } vi c,x(li),y(li); for(int i=0;i<=m;i++) c.push_back(-1); for(int i=1;i<w/2;i++){ if(usu[i]) continue; if(usu[i*2]) x[nw[i]-1]=-1; else x[nw[i]-1]=-nw[g[i][0]]; if(usu[i*2+1]) y[nw[i]-1]=-1; else y[nw[i]-1]=-nw[g[i][1]]; } for(int i=w/2;i<w;i++){ if(usu[i]) continue; x[nw[i]-1]=val[g[i][0]]; y[nw[i]-1]=val[g[i][1]]; } //for(auto u:y) cout<<u<<"\n"; 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...