Submission #295765

#TimeUsernameProblemLanguageResultExecution timeMemory
295765errorgornMechanical Doll (IOI18_doll)C++14
37 / 100
145 ms13372 KiB
#include "doll.h"

#include <bits/stdc++.h>
using namespace std;

#define ll long long
#define ii pair<ll,ll>
#define iii pair<ii,ll>
#define fi first
#define se second
#define rep(x,start,end) for(auto x=(start)-((start)>(end));x!=(end)-((start)>(end));((start)<(end)?x++:x--))
#define all(x) (x).begin(),(x).end()
#define sz(x) (int)(x).size()

struct sw{
	int l,r;
	bool flip=false;
	
	sw(){}
	sw(int _l,int _r){
		l=_l,r=_r;
	}
};

int IDX=2;
sw switches[400005];

void create_circuit(int m, vector<int> arr) {
	vector<int> dev;
	rep(x,0,m+1) dev.push_back(-1);
	
	if (sz(arr)==1){
		answer(dev,{arr[0]},{0});
		return;
	}
	
	switches[1]=sw(arr[0],arr[1]);
	
	int ss=1;
	while (ss<sz(arr)+1) ss<<=1;
	while (sz(arr)<ss-1) arr.push_back(-1);
	arr.push_back(0);
	
	rep(x,2,sz(arr)){
		int curr=1;
		
		while (true){
			switches[curr].flip^=true;
			if (switches[curr].flip){
				if (switches[curr].l<0) curr=-switches[curr].l;
				else{
					switches[IDX]=sw(switches[curr].l,arr[x]);
					switches[curr].l=-IDX;
					IDX++;
					break;
				}
			}
			else{
				if (switches[curr].r<0) curr=-switches[curr].r;
				else{
					switches[IDX]=sw(switches[curr].r,arr[x]);
					switches[curr].r=-IDX;
					IDX++;
					break;
				}
			}
		}
	}
	
	vector<int> l;
	vector<int> r;
	
	rep(x,1,IDX) l.push_back(switches[x].l);
	rep(x,1,IDX) r.push_back(switches[x].r);
	
	//rep(x,1,IDX) cout<<switches[x].l<<" "<<switches[x].r<<endl;
	
	answer(dev,l,r);
}
#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...