# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
169309 | AlexLuchianov | 크레이피쉬 글쓰는 기계 (IOI12_scrivener) | C11 | 0 ms | 0 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
int const nmax = 1000000;
int far[20][1 + nmax], ptr = 0;
int level[1 + nmax];
char chr[1 + nmax];
void Init() {}
void TypeLetter(char L) {
++ptr;
far[0][ptr] = ptr - 1;
for(int h = 1; h < 20; h++)
far[h][ptr] = far[h - 1][far[h - 1][ptr]];
level[ptr] = level[far[0][ptr]] + 1;
chr[ptr] = L;
}
void UndoCommands(int U) {
++ptr;
far[0][ptr] = ptr - 1 - U;
for(int h = 1; h < 20; h++)
far[h][ptr] = far[h - 1][far[h - 1][ptr]];
level[ptr] = level[far[0][ptr]];
}
char GetLetter(int P) {
int pos = ptr;
P++;
for(int h = 19; 0 <= h; h--)
if(P <= level[far[h][pos]] )
pos = far[h][pos];
return chr[pos];
}