제출 #538810

#제출 시각아이디문제언어결과실행 시간메모리
538810__Variatto크레이피쉬 글쓰는 기계 (IOI12_scrivener)C++17
100 / 100
568 ms168588 KiB
#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define fi first
#define se second
#define ll long long
const int L=20, A=26, MAX=1e6+1;
struct st{
    st *jump[L+1];
    vector<st*>g;
    int war, gle;
};
int licznik;
st *ope[MAX];
st *root=new st;
void Init(){
    for(int i=0; i<L; i++)
        root->jump[i]=root;
    root->gle=-1;
    ope[0]=root;
}
st *dodaj(st *v, char c){
    for(auto s: v->g)
        if(s->war==c-'a')
            return s;
    st *nowy=new st;
    nowy->war=c-'a';
    nowy->gle=v->gle+1;
    nowy->jump[0]=v;
    for(int i=1; i<=L; i++)
        nowy->jump[i]=nowy->jump[i-1]->jump[i-1];
    v->g.pb(nowy);
    return nowy;
}
void TypeLetter(char c){
    licznik++;
    st *akt=ope[licznik-1];
    akt=dodaj(akt, c);
    ope[licznik]=akt;
}
void UndoCommands(int x){
    licznik++;
    ope[licznik]=ope[licznik-x-1];
}
char GetLetter(int pos){
    st *akt=ope[licznik];
    //cout<<akt<<"\n";
    int x=akt->gle-pos, l=0;
    while(x){
        if(x%2) akt=akt->jump[l];
        x/=2, l++;
    }
    return char(akt->war+'a');
}
#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...