Submission #125048

# Submission time Handle Problem Language Result Execution time Memory
125048 2019-07-04T13:52:46 Z TuGSGeReL Mechanical Doll (IOI18_doll) C++17
84 / 100
173 ms 8180 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();
	if ( n == 1 )
	{
		answer(C, X, Y);
	}
	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:101:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  101 |  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 46 ms 4152 KB Output is correct
3 Correct 43 ms 4036 KB Output is correct
4 Correct 1 ms 204 KB Output is correct
5 Correct 12 ms 1604 KB Output is correct
6 Correct 83 ms 5144 KB Output is correct
7 Incorrect 1 ms 204 KB Wrong Answer: wrong array length
# Verdict Execution time Memory Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 46 ms 4152 KB Output is correct
3 Correct 43 ms 4036 KB Output is correct
4 Correct 1 ms 204 KB Output is correct
5 Correct 12 ms 1604 KB Output is correct
6 Correct 83 ms 5144 KB Output is correct
7 Incorrect 1 ms 204 KB Wrong Answer: wrong array length
# Verdict Execution time Memory Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 46 ms 4152 KB Output is correct
3 Correct 43 ms 4036 KB Output is correct
4 Correct 1 ms 204 KB Output is correct
5 Correct 12 ms 1604 KB Output is correct
6 Correct 83 ms 5144 KB Output is correct
7 Incorrect 1 ms 204 KB Wrong Answer: wrong array length
# Verdict Execution time Memory Grader output
1 Correct 2 ms 204 KB Output is correct
2 Correct 2 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 72 ms 4912 KB Output is correct
3 Correct 85 ms 4924 KB Output is correct
4 Correct 114 ms 7288 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 72 ms 4912 KB Output is correct
3 Correct 85 ms 4924 KB Output is correct
4 Correct 114 ms 7288 KB Output is correct
5 Correct 121 ms 8180 KB Output is correct
6 Correct 126 ms 7948 KB Output is correct
7 Correct 173 ms 7936 KB Output is correct
8 Correct 147 ms 7696 KB Output is correct
9 Correct 75 ms 4912 KB Output is correct
10 Correct 120 ms 7572 KB Output is correct
11 Correct 138 ms 7360 KB Output is correct
12 Correct 78 ms 4936 KB Output is correct
13 Correct 78 ms 5176 KB Output is correct
14 Correct 94 ms 5232 KB Output is correct
15 Correct 84 ms 5404 KB Output is correct
16 Correct 3 ms 460 KB Output is correct
17 Correct 74 ms 4912 KB Output is correct
18 Correct 76 ms 4912 KB Output is correct
19 Correct 77 ms 4932 KB Output is correct
20 Correct 116 ms 7424 KB Output is correct
21 Correct 115 ms 7280 KB Output is correct
22 Correct 116 ms 7296 KB Output is correct