// IOI 2012 - Crayfish Scrivener
// Lúcio Cardoso
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e6+10;
const int MAXL = 22;
int t, pai, nivel[MAXN], k[MAXN], tab[MAXN][MAXL];
char C[MAXN];
void Init(void)
{
memset(tab, -1, sizeof tab);
}
void TypeLetter(char c)
{
t++;
k[t] = t, C[t] = c, nivel[t] = nivel[pai]+1;
tab[t][0] = pai;
for (int j = 1; j < MAXL; j++)
if (tab[t][j-1] != -1)
tab[t][j] = tab[tab[t][j-1]][j-1];
pai = t;
}
void UndoCommands(int u)
{
k[t+1] = k[t-u];
t++;
pai = k[t];
}
char GetLetter(int p)
{
if (p+1 == nivel[k[t]]) return C[k[t]];
int u = k[t];
p = nivel[k[t]]-p-1;
for (int i = MAXL-1; i >= 0; i--)
if (p-(1<<i) >= 0)
u = tab[u][i], p -= (1<<i);
return C[u];
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
69 ms |
86396 KB |
Output is correct |
2 |
Correct |
70 ms |
86544 KB |
Output is correct |
3 |
Correct |
67 ms |
86608 KB |
Output is correct |
4 |
Correct |
74 ms |
86668 KB |
Output is correct |
5 |
Correct |
67 ms |
86668 KB |
Output is correct |
6 |
Correct |
68 ms |
86668 KB |
Output is correct |
7 |
Correct |
69 ms |
86668 KB |
Output is correct |
8 |
Correct |
70 ms |
86688 KB |
Output is correct |
9 |
Correct |
69 ms |
86784 KB |
Output is correct |
10 |
Correct |
69 ms |
86892 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
73 ms |
86892 KB |
Output is correct |
2 |
Correct |
69 ms |
86892 KB |
Output is correct |
3 |
Correct |
70 ms |
86892 KB |
Output is correct |
4 |
Correct |
69 ms |
86892 KB |
Output is correct |
5 |
Correct |
68 ms |
86908 KB |
Output is correct |
6 |
Correct |
70 ms |
86940 KB |
Output is correct |
7 |
Correct |
68 ms |
86940 KB |
Output is correct |
8 |
Correct |
68 ms |
86940 KB |
Output is correct |
9 |
Correct |
68 ms |
86940 KB |
Output is correct |
10 |
Correct |
72 ms |
86940 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
72 ms |
86960 KB |
Output is correct |
2 |
Correct |
71 ms |
86972 KB |
Output is correct |
3 |
Correct |
70 ms |
87012 KB |
Output is correct |
4 |
Correct |
78 ms |
87056 KB |
Output is correct |
5 |
Correct |
70 ms |
87056 KB |
Output is correct |
6 |
Correct |
76 ms |
87140 KB |
Output is correct |
7 |
Correct |
74 ms |
87184 KB |
Output is correct |
8 |
Correct |
73 ms |
87184 KB |
Output is correct |
9 |
Correct |
68 ms |
87212 KB |
Output is correct |
10 |
Correct |
70 ms |
87236 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
514 ms |
97372 KB |
Output is correct |
2 |
Correct |
576 ms |
102760 KB |
Output is correct |
3 |
Correct |
425 ms |
107620 KB |
Output is correct |
4 |
Correct |
424 ms |
114168 KB |
Output is correct |
5 |
Correct |
527 ms |
118100 KB |
Output is correct |
6 |
Correct |
492 ms |
123272 KB |
Output is correct |
7 |
Correct |
534 ms |
128168 KB |
Output is correct |
8 |
Correct |
569 ms |
134140 KB |
Output is correct |
9 |
Correct |
655 ms |
138164 KB |
Output is correct |
10 |
Correct |
304 ms |
143088 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
675 ms |
145044 KB |
Output is correct |
2 |
Correct |
743 ms |
149712 KB |
Output is correct |
3 |
Correct |
432 ms |
156152 KB |
Output is correct |
4 |
Correct |
456 ms |
162300 KB |
Output is correct |
5 |
Correct |
516 ms |
168460 KB |
Output is correct |
6 |
Correct |
474 ms |
173268 KB |
Output is correct |
7 |
Correct |
466 ms |
177432 KB |
Output is correct |
8 |
Correct |
642 ms |
182456 KB |
Output is correct |
9 |
Correct |
799 ms |
187820 KB |
Output is correct |
10 |
Correct |
265 ms |
193616 KB |
Output is correct |