제출 #23616

#제출 시각아이디문제언어결과실행 시간메모리
23616mohammad_kilani크레이피쉬 글쓰는 기계 (IOI12_scrivener)C++14
100 / 100
783 ms142472 KiB
//#include"grader.h"
#include<vector>
using namespace std;

int node = 0;
int lastnode = 0;
vector<pair<int,char> > g[1000010];
int dp[23][1000010];
vector<int> curnode;
char chr[1000100];
int depth[1000100];

void Init() {
    dp[0][0] = -1;
    curnode.push_back(0);
    return;
}

void TypeLetter(char L) {
    node++;
    g[lastnode].push_back(make_pair(node,L));
    dp[0][node] = lastnode;
    for(int k=1;k<=22;k++){
        if(dp[k-1][node] == -1)
            dp[k][node] = -1;
        else
            dp[k][node] = dp[k-1][dp[k-1][node]];
    }
    chr[node] = L;
    depth[node] = depth[lastnode] + 1;
    curnode.push_back(node);
    lastnode = node;
}

void UndoCommands(int U) {
    int tmpnode = curnode[curnode.size()-U-1];
    lastnode = tmpnode;
    curnode.push_back(lastnode);
}

char GetLetter(int P) {
    int u = lastnode;
    P++;
    for(int i=22;i>=0;i--){
        if(depth[u]-(1<<i) >= P){
            u = dp[i][u];
        }
    }
    return chr[u];

}
#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...