Submission #260602

# Submission time Handle Problem Language Result Execution time Memory
260602 2020-08-10T15:02:36 Z ElyesChaabouni Crayfish scrivener (IOI12_scrivener) C++14
0 / 100
871 ms 108908 KB
/*#pragma GCC optimize("O3")*/
#include<bits/stdc++.h>
//#include <ext/pb_ds/assoc_container.hpp>
//#include <ext/pb_ds/tree_policy.hpp> 
//#define ordered_set tree<int, null_type,less<int >, rb_tree_tag,tree_order_statistics_node_update> 
#define eps 1e-9
#define MOD1 998244353
#define MOD2 1000000007
#define INV_10 299473306
#define INF 1000000001
#define PI 3.14159265358979323846
using namespace std;
int pos=0;
vector<int>v, depth;
vector<char>tree;
vector<int>anc[1000005];
void process(int x, int y)
{
	int nb=0;
	bool ok=true;
	anc[x].push_back(y);
	while(ok)
	{
		int cu=anc[x].back();
		if(anc[cu].size() > nb)
		{
			anc[x].push_back(anc[cu][nb]);
			nb++;
		}
		else
			ok=false;
	}
}
char find_kth(int x, int k)
{
	int nb=0;
	while(k)
	{
		if(k%2==1)
			x=anc[x][nb];
		nb++;
		k/=2;
	}
	return tree[x];
}
void Init()
{
	v.clear();
	tree.clear();
	depth.clear();
	tree.push_back('0');
	depth.push_back(0);
	v.push_back(0);
	for(int i = 0; i < 1000005; i++)
	{
		anc[i].clear();
	}
	pos=0;
}
void TypeLetter(char L)
{
	tree.push_back(L);
	process(tree.size()-1, pos);
	depth.push_back(depth[pos]+1);
	pos=tree.size()-1;
	v.push_back(pos);
	cout << pos << ' ' << tree[pos] << '\n';
}
void UndoCommands(int U)
{
	int l=v.size();
	v.push_back(v[l-1-U]);
	pos=v.back();
	depth.push_back(depth[pos]);
	cout << pos << ' ' << tree[pos] << '\n';
}
char GetLetter(int P)
{
	P++;
	return find_kth(pos, depth.back()-P);
}
int mn()
{
	while(1)
	{
		int t;
		cin >> t;
		if(t==0)
			Init();
		if(t==1)
		{
			char c;
			cin >> c;
			TypeLetter(c);
		}
		if(t==2)
		{
			int x;
			cin >> x;
			UndoCommands(x);
		}
		if(t==3)
		{
			int x;
			cin >> x;
			cout << GetLetter(x) << '\n';
		}
	}
}
//size

Compilation message

scrivener.cpp: In function 'void process(int, int)':
scrivener.cpp:25:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   if(anc[cu].size() > nb)
      ~~~~~~~~~~~~~~~^~~~
# Verdict Execution time Memory Grader output
1 Incorrect 18 ms 23808 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 17 ms 23808 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 18 ms 23936 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 871 ms 108908 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 869 ms 95012 KB Output isn't correct
2 Halted 0 ms 0 KB -