Submission #125044

# Submission time Handle Problem Language Result Execution time Memory
125044 2019-07-04T13:46:00 Z TuGSGeReL Mechanical Doll (IOI18_doll) C++17
84 / 100
144 ms 8140 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();
	
	X.resize(n + log2(n));
	Y.resize(n + log2(n));
	
	while ( k < n )
		k *= 2;
	
	C.pub(A[0]);
	
	for (int i = 1; i <= M; i++)
		C.pub(-1);
	
	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:98:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   98 |  for (int i = 1; i < A.size(); i++)
      |                  ~~^~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 47 ms 4160 KB Output is correct
3 Correct 53 ms 4152 KB Output is correct
4 Correct 1 ms 204 KB Output is correct
5 Correct 15 ms 1604 KB Output is correct
6 Correct 85 ms 5076 KB Output is correct
7 Runtime error 2 ms 1100 KB Execution killed with signal 11
# Verdict Execution time Memory Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 47 ms 4160 KB Output is correct
3 Correct 53 ms 4152 KB Output is correct
4 Correct 1 ms 204 KB Output is correct
5 Correct 15 ms 1604 KB Output is correct
6 Correct 85 ms 5076 KB Output is correct
7 Runtime error 2 ms 1100 KB Execution killed with signal 11
# Verdict Execution time Memory Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 47 ms 4160 KB Output is correct
3 Correct 53 ms 4152 KB Output is correct
4 Correct 1 ms 204 KB Output is correct
5 Correct 15 ms 1604 KB Output is correct
6 Correct 85 ms 5076 KB Output is correct
7 Runtime error 2 ms 1100 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 2 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 74 ms 4924 KB Output is correct
3 Correct 79 ms 4908 KB Output is correct
4 Correct 124 ms 7348 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 74 ms 4924 KB Output is correct
3 Correct 79 ms 4908 KB Output is correct
4 Correct 124 ms 7348 KB Output is correct
5 Correct 131 ms 8140 KB Output is correct
6 Correct 125 ms 7928 KB Output is correct
7 Correct 143 ms 8072 KB Output is correct
8 Correct 130 ms 7696 KB Output is correct
9 Correct 92 ms 4932 KB Output is correct
10 Correct 144 ms 7572 KB Output is correct
11 Correct 120 ms 7288 KB Output is correct
12 Correct 78 ms 4928 KB Output is correct
13 Correct 81 ms 5164 KB Output is correct
14 Correct 81 ms 5296 KB Output is correct
15 Correct 92 ms 5464 KB Output is correct
16 Correct 3 ms 460 KB Output is correct
17 Correct 81 ms 4936 KB Output is correct
18 Correct 76 ms 4916 KB Output is correct
19 Correct 77 ms 4912 KB Output is correct
20 Correct 119 ms 7380 KB Output is correct
21 Correct 116 ms 7356 KB Output is correct
22 Correct 115 ms 7364 KB Output is correct