Submission #965947

#TimeUsernameProblemLanguageResultExecution timeMemory
965947hirayuu_ojCrayfish scrivener (IOI12_scrivener)C++17
100 / 100
344 ms141132 KiB
#include<bits/stdc++.h>
using namespace std;
#define rep(i,n) for(int i=0; i<(n); i++)

const int N=1000000;
vector<int> indexs;
int ver=1;
vector<array<int,32>> inf_stack(N);
vector<char> lets(N);
vector<int> lens(N);
void Init() {
    lets[0]=' ';
    lens[0]=0;
    rep(i,32)inf_stack[0][i]=0;
    indexs.push_back(0);
}

void TypeLetter(char L) {

    lets[ver]=L;
    lens[ver]=lens[indexs.back()]+1;
    inf_stack[ver][0]=indexs.back();
    indexs.push_back(ver);
    for(int i=1; i<32; i++){
        inf_stack[ver][i]=inf_stack[inf_stack[ver][i-1]][i-1];
    }
    ver++;

}

void UndoCommands(int U) {
    indexs.push_back(indexs[indexs.size()-U-1]);
}

char GetLetter(int P) {

    int back=lens[indexs.back()]-P-1;
    int pos=indexs.back();
    rep(i,32){
        if(back&1){
            pos=inf_stack[pos][i];
        }
        back/=2;
    }

    return lets[pos];

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