# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
234547 | 2020-05-24T12:50:09 Z | crossing0ver | 크레이피쉬 글쓰는 기계 (IOI12_scrivener) | C++17 | 0 ms | 0 KB |
#include<bits/stdc++.h> using namespace std; int operations; char lastchar[1000005]; int P[1000005][20],sz[1000005]; void init() { } void TypeLetter(char L){ operations++; P[operations][0] = operations - 1; sz[operations] = sz[operations - 1] + 1; for (int i = 1; i < 20; i ++) P[operations][i] = P[ P[operations][i-1] ][i-1]; lastchar[operations] = L; } void UndoCommands(int U) { operations++; sz[operations] = sz[operations - 1 - U]; P[operations][0] = P[operations - 1 - U][0]; lastchar[operations]= lastchar[operations - 1 - U]; for (int i = 1; i < 20; i++) P[operations][i] = P[ P[operations][i-1] ][i-1]; } char GetLetter(int p) { int x = sz[operations] - p - 1; int cur = operations; for (int i = 0; i < 20 ;i++) { if (x & (1 << i)) { cur = P[cur][i]; } } return lastchar[cur]; }