Submission #294994

#TimeUsernameProblemLanguageResultExecution timeMemory
294994kshitij_sodaniMechanical Doll (IOI18_doll)C++14
47 / 100
171 ms17852 KiB
#include <bits/stdc++.h>
using namespace std;
#define a first
#define b second
#define pb push_back
#define mp make_pair
typedef long long llo;

#include "doll.h"
vector<int> pre[100001];
//vector<int> adj[100001];
vector<int> ac;
vector<int> x;
vector<int> y;
int cur=0;
int cot;
pair<int,int> adj[1000001];
int stt[1000001];
void con(int ind,int tot,int dd){
//	x.pb(0);
	//y.pb(0);
	//cout<<dd<<".."<<endl;
	//cout<<-cur<<"::"<<x.size()<<endl;
	if(ind==tot-1){
		/*x.pb(0);
		y.pb(0);*/
	}
	else{
		adj[-dd]={-cur+1,-cur+2};
		//cout<<-dd<<":"<<-cur+1<<" "<<-cur+2<<endl;
		/*if(-dd-1==3){
			cout<<11<<endl;
			
		}*/
		//cout<<x.size()<<endl;
		x[-dd-1]=cur-1;
		y[-dd-1]=cur-2;
		x.pb(0);
		x.pb(0);
		y.pb(0);
		y.pb(0);
		
		//cout<<-dd-1<<endl<<"::"<<cur-1<<endl;
	//	cout<<x[3]<<endl;
		cur--;
		cur--;
		int ba=cur;
		con(ind+1,tot,cur+1);
		con(ind+1,tot,ba);
	}
}
void create_circuit(int m, vector<int> aa) {
	int n=aa.size();
	
	for(int i=0;i<=m;i++){
		ac.pb(-1);
	}
	ac[0]=aa[0];
	for(int i=0;i<aa.size()-1;i++){
		pre[aa[i]].pb(aa[i+1]);
	}

	pre[aa.back()].pb(0);
	int xx=n;
	//ac.pb(0);
	aa.pb(0);
		int i=0;
			int dep=0;
			for(int j=0;j<=19;j++){
				if((1<<j)>=xx){
					dep=j;
					break;
				}
			}
		//	cout<<dep<<endl;
			cur--;
			//ac[i]=cur;
			x.pb(0);
			y.pb(0);
			con(0,dep,cur);
		//	continue;
			int op=(1<<dep);
			int ind2=1;
			//continue;
			for(int j=0;j<(1<<dep);j++){
				int st=1;
				//cout<<j<<",,"<<endl;
				for(int jj=0;jj<dep-1;jj++){
					if(stt[st]==0){
						stt[st]=1-stt[st];
						st=adj[st].a;
					}
					else{
						stt[st]=1-stt[st];
						st=adj[st].b;
					}
					
				}
				op--;
				//cout<<j<<":"<<st<<endl;
				if(op<n){
					//cout<<stt[st]<<",,"<<pre[i][ind2]<<endl;
					if(stt[st]==0){
						x[st-1]=aa[ind2];
					}
					else{
						y[st-1]=aa[ind2];
					}
					stt[st]=1-stt[st];
					ind2++;
				}
				else{
					if(stt[st]==0){
						x[st-1]=-1;
					}
					else{
						y[st-1]=-1;
					}
					stt[st]=1-stt[st];
				}
			}

	/*for(int i=1;i<=m;i++){
		cot=i;
		if(pre[i].size()==0){
			continue;
		}
		if(pre[i].size()==1){
			ac[i]=pre[i][0];
		}
		else{
			int xx=pre[i].size();
			int dep=0;
			for(int j=0;j<=19;j++){
				if((1<<j)>=xx){
					dep=j;
					break;
				}
			}
		//	cout<<dep<<endl;
			cur--;
			ac[i]=cur;
			x.pb(0);
			y.pb(0);
			con(0,dep,cur);
		//	continue;
			int op=(1<<dep);
			int ind2=0;
			//continue;
			for(int j=0;j<(1<<dep);j++){
				int st=-ac[i];
				//cout<<j<<",,"<<endl;
				for(int jj=0;jj<dep-1;jj++){
					if(stt[st]==0){
						stt[st]=1-stt[st];
						st=adj[st].a;
					}
					else{
						stt[st]=1-stt[st];
						st=adj[st].b;
					}
					
				}
				op--;
				//cout<<j<<":"<<st<<endl;
				if(op<pre[i].size()){
					//cout<<stt[st]<<",,"<<pre[i][ind2]<<endl;
					if(stt[st]==0){
						x[st-1]=pre[i][ind2];
					}
					else{
						y[st-1]=pre[i][ind2];
					}
					stt[st]=1-stt[st];
					ind2++;
				}
				else{
					if(stt[st]==0){
						x[st-1]=ac[i];
					}
					else{
						y[st-1]=ac[i];
					}
					stt[st]=1-stt[st];
				}
			}
		}
	}
*/
	/*while(x.size()>-cur){
		x.pop_back();
	}
	while(y.size()>-cur){
		y.pop_back();
	}*/
	
	/*for(auto j:ac){
		cout<<j<<",";
	}
	cout<<endl;
	for(auto j:x){
		cout<<j<<",";
	}
	cout<<endl;
	for(auto j:y){
		cout<<j<<",";
	}
	cout<<endl;*/

	answer(ac,x,y);









}

Compilation message (stderr)

doll.cpp: In function 'void create_circuit(int, std::vector<int>)':
doll.cpp:59:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   59 |  for(int i=0;i<aa.size()-1;i++){
      |              ~^~~~~~~~~~~~
doll.cpp:67:7: warning: unused variable 'i' [-Wunused-variable]
   67 |   int i=0;
      |       ^
#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...