Submission #125045

# Submission time Handle Problem Language Result Execution time Memory
125045 2019-07-04T13:46:45 Z TuGSGeReL Mechanical Doll (IOI18_doll) C++17
84 / 100
168 ms 8156 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[400001], 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 2 ms 204 KB Output is correct
2 Correct 50 ms 4236 KB Output is correct
3 Correct 52 ms 4136 KB Output is correct
4 Correct 1 ms 204 KB Output is correct
5 Correct 14 ms 1604 KB Output is correct
6 Correct 68 ms 5124 KB Output is correct
7 Runtime error 3 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 50 ms 4236 KB Output is correct
3 Correct 52 ms 4136 KB Output is correct
4 Correct 1 ms 204 KB Output is correct
5 Correct 14 ms 1604 KB Output is correct
6 Correct 68 ms 5124 KB Output is correct
7 Runtime error 3 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 50 ms 4236 KB Output is correct
3 Correct 52 ms 4136 KB Output is correct
4 Correct 1 ms 204 KB Output is correct
5 Correct 14 ms 1604 KB Output is correct
6 Correct 68 ms 5124 KB Output is correct
7 Runtime error 3 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 2 ms 204 KB Output is correct
3 Correct 2 ms 204 KB Output is correct
4 Correct 2 ms 204 KB Output is correct
5 Correct 3 ms 272 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 88 ms 4916 KB Output is correct
3 Correct 76 ms 4804 KB Output is correct
4 Correct 117 ms 7288 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 88 ms 4916 KB Output is correct
3 Correct 76 ms 4804 KB Output is correct
4 Correct 117 ms 7288 KB Output is correct
5 Correct 135 ms 8156 KB Output is correct
6 Correct 120 ms 7880 KB Output is correct
7 Correct 168 ms 7940 KB Output is correct
8 Correct 125 ms 7608 KB Output is correct
9 Correct 77 ms 4812 KB Output is correct
10 Correct 132 ms 7552 KB Output is correct
11 Correct 129 ms 7296 KB Output is correct
12 Correct 81 ms 5036 KB Output is correct
13 Correct 82 ms 5156 KB Output is correct
14 Correct 82 ms 5240 KB Output is correct
15 Correct 82 ms 5412 KB Output is correct
16 Correct 3 ms 460 KB Output is correct
17 Correct 77 ms 4920 KB Output is correct
18 Correct 74 ms 4932 KB Output is correct
19 Correct 77 ms 4932 KB Output is correct
20 Correct 137 ms 7440 KB Output is correct
21 Correct 114 ms 7360 KB Output is correct
22 Correct 146 ms 7288 KB Output is correct