Submission #125054

# Submission time Handle Problem Language Result Execution time Memory
125054 2019-07-04T13:57:08 Z TuGSGeReL Mechanical Doll (IOI18_doll) C++17
84 / 100
167 ms 8124 KB
#include "doll.h"
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>

using namespace std;
using namespace __gnu_pbds;

#define ll long long
#define mp make_pair
#define pub push_back
#define pob pop_back()
#define ss second
#define ff first
#define mt make_tuple
#define pof pop_front()
#define fbo find_by_order
#define ook order_of_key
#define lb lower_bound
#define ub upper_bound

typedef tree<int, null_type, less_equal<int>, rb_tree_tag, tree_order_statistics_node_update> indexed_set;
using pll = pair <ll, ll>;
using pii = pair <int, int>;

int st[300001], n, k = 1, cnt, cur = 1;
vector<int> X, Y, C;

void solve(int res, int num, int at)
{
	if ( num == 1 )
	{
		Y[-at - 1] = 0;
		
		if ( res == 2 )
			X[-at - 1] = 0;
		
		else
			X[-at - 1] = -1;
	} else {
		if ( res <= num )
			X[-at - 1] = -1;
		
		else
			X[-at - 1] = -(++cur);
		
		Y[-at - 1] = -(++cur);
		
		if ( res > num )
		{
			solve(res - num, num / 2, X[-at - 1]);
			solve(num, num / 2, Y[-at - 1]);
		} else{
			solve(res, num / 2, Y[-at - 1]);
		}
	}
}

void dfs(int u, int j )
{
	if ( !st[- u - 1] )
	{
		if ( X[- u - 1] == 0 )
		{
			X[- u - 1] = j;
			st[- u - 1] = 1;
		} else {
			st[- u - 1] = 1;
			dfs(X[- u - 1], j);
		}
	} else {
		if ( Y[- u - 1] == 0 )
		{
			Y[- u - 1] = j;
			st[- u - 1] = 0;
		} else {
			st[- u - 1] = 0;
			dfs(Y[- u - 1], j);
		}
	}
}

void create_circuit(int M, vector<int> A) {
	n = A.size();
	C.pub(A[0]);
	
	for (int i = 1; i <= M; i++)
		C.pub(-1);
	
	if ( n == 1 )
	{
		for (int i = 1; i <= M; i++)
			C[i] = 0;
		
		answer(C, X, Y);
	}

	X.resize(n + log2(n));
	Y.resize(n + log2(n));
	
	while ( k < n )
		k *= 2;
	
	
	solve(n, k / 2, -1);
	
	for (int i = 1; i < A.size(); i++)
		dfs(-1, A[i]);
	
	answer(C, X, Y);
}	

Compilation message

doll.cpp: In function 'void create_circuit(int, std::vector<int>)':
doll.cpp:106:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  106 |  for (int i = 1; i < A.size(); i++)
      |                  ~~^~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 2 ms 204 KB Output is correct
2 Correct 47 ms 4248 KB Output is correct
3 Correct 43 ms 4024 KB Output is correct
4 Correct 1 ms 204 KB Output is correct
5 Correct 13 ms 1604 KB Output is correct
6 Correct 70 ms 5168 KB Output is correct
7 Runtime error 2 ms 1228 KB Execution killed with signal 11
# Verdict Execution time Memory Grader output
1 Correct 2 ms 204 KB Output is correct
2 Correct 47 ms 4248 KB Output is correct
3 Correct 43 ms 4024 KB Output is correct
4 Correct 1 ms 204 KB Output is correct
5 Correct 13 ms 1604 KB Output is correct
6 Correct 70 ms 5168 KB Output is correct
7 Runtime error 2 ms 1228 KB Execution killed with signal 11
# Verdict Execution time Memory Grader output
1 Correct 2 ms 204 KB Output is correct
2 Correct 47 ms 4248 KB Output is correct
3 Correct 43 ms 4024 KB Output is correct
4 Correct 1 ms 204 KB Output is correct
5 Correct 13 ms 1604 KB Output is correct
6 Correct 70 ms 5168 KB Output is correct
7 Runtime error 2 ms 1228 KB Execution killed with signal 11
# Verdict Execution time Memory Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 1 ms 204 KB Output is correct
3 Correct 1 ms 204 KB Output is correct
4 Correct 1 ms 204 KB Output is correct
5 Correct 1 ms 204 KB Output is correct
6 Correct 1 ms 204 KB Output is correct
7 Correct 1 ms 204 KB Output is correct
8 Correct 1 ms 204 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 98 ms 4920 KB Output is correct
3 Correct 84 ms 4908 KB Output is correct
4 Correct 133 ms 7272 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 98 ms 4920 KB Output is correct
3 Correct 84 ms 4908 KB Output is correct
4 Correct 133 ms 7272 KB Output is correct
5 Correct 128 ms 8124 KB Output is correct
6 Correct 129 ms 7872 KB Output is correct
7 Correct 167 ms 7992 KB Output is correct
8 Correct 124 ms 7588 KB Output is correct
9 Correct 77 ms 4908 KB Output is correct
10 Correct 125 ms 7556 KB Output is correct
11 Correct 118 ms 7352 KB Output is correct
12 Correct 78 ms 4932 KB Output is correct
13 Correct 77 ms 5156 KB Output is correct
14 Correct 86 ms 5268 KB Output is correct
15 Correct 84 ms 5412 KB Output is correct
16 Correct 3 ms 460 KB Output is correct
17 Correct 79 ms 4920 KB Output is correct
18 Correct 81 ms 4912 KB Output is correct
19 Correct 94 ms 4924 KB Output is correct
20 Correct 129 ms 7392 KB Output is correct
21 Correct 121 ms 7280 KB Output is correct
22 Correct 132 ms 7288 KB Output is correct