| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
|---|---|---|---|---|---|---|---|
| 12679 | gs14004 | 크레이피쉬 글쓰는 기계 (IOI12_scrivener) | C++98 | 0 ms | 0 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
int ops[1000005], prev[1000005], size[1000005], sz;
void Init(){
}
void TypeLetter(char L){
ops[sz] = L;
if(sz) size[sz] = size[prev[sz]]+1;
else size[sz] = 1;
sz++;
prev[sz] = sz-1;
}
void UndoCommands(int U){
prev[sz] = sz-U-1;
}
char GetLetter(int P){
int i = prev[sz];
int piv = size[i] - P - 1;
while (piv) {
i = prev[i];
piv--;
}
return ops[i];
}
#include <stdlib.h>
#include <stdio.h>
#include <assert.h>
int main() {
Init();
int cmd_num;
int tmp = scanf("%d", &cmd_num);
assert(tmp == 1);
int i;
for (i = 0; i < cmd_num; i++) {
char cmd;
tmp = scanf(" %c", &cmd);
assert(tmp == 1);
if (cmd == 'T') {
char letter;
tmp = scanf(" %c", &letter);
assert(tmp == 1);
TypeLetter(letter);
}
else if (cmd == 'U') {
int number;
tmp = scanf("%d", &number);
assert(tmp == 1);
UndoCommands(number);
}
else if (cmd == 'P') {
int index;
char letter;
tmp = scanf("%d", &index);
assert(tmp == 1);
letter = GetLetter(index);
printf("%c\n", letter);
}
}
// puts("Let's test for cheating!!");
return 0;
}
