Submission #714553

#TimeUsernameProblemLanguageResultExecution timeMemory
714553firewaterMechanical Doll (IOI18_doll)C++14
100 / 100
156 ms12168 KiB
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include <vector>
#define ll long long
#define N 202300
#include "doll.h"
using namespace std;
vector<int>ans,P,Q;
int w,n,nn,v[N],a[N];
int dfs(int L,int R,int l,int r)
{
	if(L==R){
		if(L==1)return 0;
		return v[l];
	}
	int x=P.size(),y,z,mid=L+R>>1;
	P.push_back(0);
	Q.push_back(0);
	if(r<=mid){
		y=-1;
		z=dfs(L,mid,l,r);
	}
	else{
		y=dfs(mid+1,R,mid+1,r);
		z=dfs(L,mid,l,mid);
	}
	P[x]=y;
	Q[x]=z;
	return -x-1;
}
bool cmp(int x,int y)
{
	while((x&1)==(y&1)){
		x>>=1;
		y>>=1;
	}
	return (x&1)>(y&1);
}
void create_circuit(int M, std::vector<int> A)
{ 
	n=A.size();
	for(int i=1;i<=n;++i)
		a[i]=i;
	sort(a+1,a+1+n,cmp);
	for(int i=1;i<=n;++i)
		v[a[i]+1]=A[i-1];
	nn=1;
	while(nn<n+1)nn<<=1;
	
	
	if(n==1){
		ans.push_back(A[0]);
		for(int i=1;i<=M;++i)
			ans.push_back(0);
	}
	else{
		for(int i=0;i<=M;++i)
			ans.push_back(-1);
		dfs(1,nn,1,n+1);
	}
	answer(ans,P,Q);
	return;
}

Compilation message (stderr)

doll.cpp: In function 'int dfs(int, int, int, int)':
doll.cpp:18:26: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   18 |  int x=P.size(),y,z,mid=L+R>>1;
      |                         ~^~
#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...