답안 #109376

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
109376 2019-05-06T10:00:30 Z nvmdava 자동 인형 (IOI18_doll) C++17
2 / 100
1000 ms 9996 KB
#include "doll.h"
#include <bits/stdc++.h>
#define pb push_back
using namespace std;
vector<int> aft[200005], C, X, Y, st;
int sz = 0;
int t;

void go(int id, int root, int v, int cnt, int dep){
	dep--;
	if(dep == 0){
		if(cnt == 1){
			X[-1 - v] = 1;
			Y[-1 - v] = root;
		} else if(cnt == 2){
			X[-1 - v] = 1;
			Y[-1 - v] = 1;
		}
		
		return;
	}
	X[-1 - v] = --sz;
	Y[-1 - v] = cnt - (1 << dep) > 0 ? --sz : root;
	X.pb(0);
	Y.pb(0);
	st.pb(0);
	go(id, root, X[-1 - v], min(1 << dep, cnt), dep);
	if(Y[-1 - v] != root){
		st.pb(0);
		X.pb(0);
		Y.pb(0);
		go(id, root, Y[-1 - v], cnt - (1 << dep), dep);
	}
}

void trav(int root, int id, int idd){
	if(st[-1 - id] == 0){
		if(X[-1 - id] == 1){
			st[-1 - id] = 1;
			X[-1 - id] = aft[idd][t++];
			trav(root, root, idd);
		} else {
			st[-1 - id] = 1;
			trav(root, X[-1 - id], idd);
		}
	} else {
		if(Y[-1 - id] == 1){
			st[-1 - id] = 0;
			Y[-1 - id] = aft[idd][t++];
			trav(root, root, idd);
		} else {
			st[-1 - id] = 0;
			trav(root, Y[-1 - id], idd);
		}
	}
}

void solve(int id){
	if(!aft[id].size())
		C[id] = 0;
	else if(aft[id].size() == 1)
		C[id] = aft[id][0];
	else {
		t = 0;
		C[id] = --sz;
		X.pb(0);
		st.pb(0);
		Y.pb(0);
		int dep = ceil(log2(aft[id].size()));
		go(id, C[id], C[id], aft[id].size(), dep);
		trav(C[id], C[id], id);
	}
}

void create_circuit(int M, vector<int> A) {
	C.resize(M + 1);
	aft[0].pb(A[0]);
	for(int i = 1; i < A.size(); i++)
		aft[A[i - 1]].pb(A[i]);
	aft[A.back()].pb(0);
	for(int i = 0; i <= M; i++)
		solve(i);
	answer(C, X, Y);
}

Compilation message

doll.cpp: In function 'void create_circuit(int, std::vector<int>)':
doll.cpp:78:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   78 |  for(int i = 1; i < A.size(); i++)
      |                 ~~^~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 7 ms 4940 KB Output is correct
2 Correct 33 ms 8652 KB Output is correct
3 Correct 29 ms 8260 KB Output is correct
4 Correct 4 ms 4940 KB Output is correct
5 Correct 16 ms 6092 KB Output is correct
6 Correct 41 ms 9996 KB Output is correct
7 Correct 6 ms 4940 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 7 ms 4940 KB Output is correct
2 Correct 33 ms 8652 KB Output is correct
3 Correct 29 ms 8260 KB Output is correct
4 Correct 4 ms 4940 KB Output is correct
5 Correct 16 ms 6092 KB Output is correct
6 Correct 41 ms 9996 KB Output is correct
7 Correct 6 ms 4940 KB Output is correct
8 Execution timed out 1082 ms 8220 KB Time limit exceeded
9 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 7 ms 4940 KB Output is correct
2 Correct 33 ms 8652 KB Output is correct
3 Correct 29 ms 8260 KB Output is correct
4 Correct 4 ms 4940 KB Output is correct
5 Correct 16 ms 6092 KB Output is correct
6 Correct 41 ms 9996 KB Output is correct
7 Correct 6 ms 4940 KB Output is correct
8 Execution timed out 1082 ms 8220 KB Time limit exceeded
9 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1077 ms 4940 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 11 ms 9932 KB Execution killed with signal 6
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 11 ms 9932 KB Execution killed with signal 6
2 Halted 0 ms 0 KB -