제출 #138996

#제출 시각아이디문제언어결과실행 시간메모리
138996Mahdi_Jfri자동 인형 (IOI18_doll)C++14
0 / 100
7 ms6732 KiB
#include "doll.h"
#include<bits/stdc++.h>

using namespace std;

#define ll long long
#define pb push_back
#define bit(a , b) (((a)>>(b))&1)

const int maxn = 4e5 + 20;
const int maxb = 20;

int id , pt , R;
int x[maxn] , y[maxn];

vector<int> a , bits;

int build(int n)
{
	if(n == 0)
		return -1;

	int root = id++;
	x[root] = build(n - 1);
	y[root] = build(n - 1);

	return root;
}

int solve(int k)
{
	while(k < bits[0]);
	if(k == bits[0])
		return build(k);

	int xi = lower_bound(bits.begin() , bits.end() , k) - bits.begin();

	int root = id++;
	if(bits[xi] == k)
	{
		x[root] = build(k);
		y[root] = id;
		x[id] = -1e9;
		id++;
		y[id - 1] = solve(k - 1);
	}
	else
	{
		y[root] = solve(k - 1);
		x[root] = -1e9;
	}

	return root;
}

bool is[maxn];

int dfs(int v)
{
	while(pt < (int)a.size())
	{
		if(!is[v])
		{
			is[v] ^= 1;
			if(x[v] < 0)
				x[v] = a[pt++] + maxn * 10 , v = R;
			else
				v = x[v];
		}
		else
		{
			is[v] ^= 1;
			if(y[v] < 0)
				y[v] = a[pt++] + maxn * 10 , v = R;
			else
				v = y[v];
		}
	}
}

void create_circuit(int m, vector<int> A)
{
	memset(x , -1 , sizeof x);
	memset(y , -1 , sizeof y);

	a = A;
	a.pb(0);
	int n = a.size();

	for(int j = 0; j < 20; j++)
		if(bit(n , j))
			bits.pb(j);

	R = solve(bits.back());
	for(int i = 0; i < id; i++)
		if(x[i] < -maxn)
			x[i] = R;

	dfs(R);

	for(int i = 0; i < id; i++)
	{
		int v = i;
		if(x[v] >= maxn * 10)
			x[v] = x[v] - maxn * 10;
		else
			x[v] = -x[v] - 1;

		if(y[v] >= maxn * 10)
			y[v] = y[v] - maxn * 10;
		else
			y[v] = -y[v] - 1;
	}

	vector<int> res;
	for(int i = 0; i <= m; i++)
		res.pb(-R - 1);

	vector<int> X , Y;
	for(int i = 0; i < id; i++)
		X.pb(x[i]) , Y.pb(y[i]);
	answer(res , X , Y);
}

컴파일 시 표준 에러 (stderr) 메시지

doll.cpp: In function 'int dfs(int)':
doll.cpp:79:1: warning: no return statement in function returning non-void [-Wreturn-type]
   79 | }
      | ^
#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...