제출 #883252

#제출 시각아이디문제언어결과실행 시간메모리
883252JakobZorz크레이피쉬 글쓰는 기계 (IOI12_scrivener)C++14
74 / 100
838 ms262144 KiB
#include<iostream>
using namespace std;

struct Trie{
    Trie*ch[26],*par[20];
    int depth;
    char c;
    Trie(){
        for(int i=0;i<26;i++)
            ch[i]=nullptr;
        for(int i=0;i<20;i++)
            par[i]=nullptr;
        depth=0;
    }
};

int curr;
Trie*root;
Trie*strs[1000000];

void Init(){
    root=new Trie;
    strs[0]=root;
    for(int i=0;i<20;i++)
        root->par[i]=root;
}

void TypeLetter(char L){
    curr++;
    strs[curr]=strs[curr-1];
    int l=L-'a';
    if(strs[curr]->ch[l]==nullptr){
        strs[curr]->ch[l]=new Trie;
        strs[curr]->ch[l]->depth=strs[curr]->depth+1;
        strs[curr]->ch[l]->c=L;
        strs[curr]->ch[l]->par[0]=strs[curr];
        for(int i=1;i<20;i++)
            strs[curr]->ch[l]->par[i]=strs[curr]->ch[l]->par[i-1]->par[i-1];
    }
    strs[curr]=strs[curr]->ch[l];
}

void UndoCommands(int U){
    curr++;
    strs[curr]=strs[curr-U-1];
}

char GetLetter(int P){
    Trie*ct=strs[curr];
    for(int i=19;i>=0;i--){
        if(ct->par[i]->depth>P)
            ct=ct->par[i];
    }
    return ct->c;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...