답안 #107584

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
107584 2019-04-25T08:34:01 Z ekrem 크레이피쉬 글쓰는 기계 (IOI12_scrivener) C++
60 / 100
1000 ms 143880 KB
#include <bits/stdc++.h>
#define st first
#define nd second
#define mp make_pair
#define pb push_back
#define mod 1000000007
#define N 1100005
using namespace std;

typedef long long ll;

struct node{
	int git[26], par[23], ne, der;
} x[N];

int n, m, k, yer[N], lg[N];

void Init(){
	for(int i = 5; i >= 1; i--){
		for(int j = (1<<i); j > (1<<(i - 1)); j--){
			lg[j] = i + 1;
			// cout << j << " " << i << endl;
		}
	}
	lg[0] = 1;
	lg[1] = 2;
}

void TypeLetter(char c){
	int node = yer[m];
	c -= 'a';
	if(x[node].git[c] != 0)
		yer[++m] = x[node].git[c];
	else{
		x[node].git[c] = ++k;
		x[k].par[0] = node;
		x[k].ne = c;
		x[k].der = x[node].der + 1;
		// cout << node << " ->" << k << endl;
		yer[++m] = k;
		for(int i = 1; i < 20; i++){
			if(x[k].par[i - 1] == 0)
				break;
			x[k].par[i] = x[x[k].par[i - 1]].par[i - 1];
		}
	}
}

void UndoCommands(int y){
	yer[m + 1] = yer[m - y];
	m++;
}

char GetLetter(int y){
	int node = yer[m];
	y = x[node].der - (y + 1);
	// cout << node << " " << y << " inci harfi bul, en son " << (char)(x[node].ne + 'a') << " var. " << x[node].der << " uzunlugunda" << endl;
	for(int i = 19; i >= 0; i--){
		if((1<<i) <= y){
			y -= (1<<i);
			node = x[node].par[i];
		}
	}
	// cout << node << endl;
	return x[node].ne + 'a';
}

// int main() {
// 	freopen("in.txt", "r", stdin);
// 	freopen("out.txt", "w", stdout);
// 	Init();
// 	TypeLetter('a');
// 	TypeLetter('b');
// 	cout << GetLetter(1) << endl;
// 	TypeLetter('d');
// 	UndoCommands(2);
// 	UndoCommands(1);
// 	cout << GetLetter(2) << endl;
// 	TypeLetter('e');
// 	UndoCommands(1);
// 	UndoCommands(5);
// 	TypeLetter('c');
// 	cout << GetLetter(2) << endl;
// 	UndoCommands(2);
// 	cout << GetLetter(2) << endl;
// 	return 0;
// }

Compilation message

scrivener.cpp: In function 'void TypeLetter(char)':
scrivener.cpp:32:18: warning: array subscript has type 'char' [-Wchar-subscripts]
  if(x[node].git[c] != 0)
                  ^
scrivener.cpp:33:27: warning: array subscript has type 'char' [-Wchar-subscripts]
   yer[++m] = x[node].git[c];
                           ^
scrivener.cpp:35:16: warning: array subscript has type 'char' [-Wchar-subscripts]
   x[node].git[c] = ++k;
                ^
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 384 KB Output is correct
2 Correct 2 ms 384 KB Output is correct
3 Correct 2 ms 384 KB Output is correct
4 Correct 2 ms 384 KB Output is correct
5 Correct 2 ms 384 KB Output is correct
6 Correct 2 ms 384 KB Output is correct
7 Correct 2 ms 436 KB Output is correct
8 Correct 2 ms 384 KB Output is correct
9 Correct 2 ms 384 KB Output is correct
10 Correct 2 ms 384 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 384 KB Output is correct
2 Correct 2 ms 384 KB Output is correct
3 Correct 2 ms 384 KB Output is correct
4 Correct 2 ms 384 KB Output is correct
5 Correct 2 ms 384 KB Output is correct
6 Correct 2 ms 384 KB Output is correct
7 Correct 2 ms 384 KB Output is correct
8 Correct 3 ms 384 KB Output is correct
9 Correct 2 ms 384 KB Output is correct
10 Correct 2 ms 384 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 640 KB Output is correct
2 Correct 4 ms 640 KB Output is correct
3 Correct 4 ms 640 KB Output is correct
4 Correct 4 ms 896 KB Output is correct
5 Correct 3 ms 640 KB Output is correct
6 Correct 5 ms 1152 KB Output is correct
7 Correct 4 ms 1024 KB Output is correct
8 Correct 3 ms 896 KB Output is correct
9 Correct 4 ms 896 KB Output is correct
10 Correct 3 ms 768 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 754 ms 118176 KB Output is correct
2 Correct 774 ms 129912 KB Output is correct
3 Correct 465 ms 126176 KB Output is correct
4 Correct 464 ms 94620 KB Output is correct
5 Correct 728 ms 109220 KB Output is correct
6 Correct 715 ms 140280 KB Output is correct
7 Correct 664 ms 66736 KB Output is correct
8 Correct 800 ms 103288 KB Output is correct
9 Correct 885 ms 143880 KB Output is correct
10 Correct 266 ms 104696 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 818 ms 100052 KB Output is correct
2 Correct 938 ms 87800 KB Output is correct
3 Correct 439 ms 95060 KB Output is correct
4 Correct 411 ms 67320 KB Output is correct
5 Correct 630 ms 106108 KB Output is correct
6 Correct 550 ms 98680 KB Output is correct
7 Correct 599 ms 105828 KB Output is correct
8 Correct 774 ms 48644 KB Output is correct
9 Execution timed out 1072 ms 90848 KB Time limit exceeded
10 Halted 0 ms 0 KB -