Submission #538806

#TimeUsernameProblemLanguageResultExecution timeMemory
538806__VariattoCrayfish scrivener (IOI12_scrivener)C++17
74 / 100
740 ms262144 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=21, A=30, MAX=1e6+10; struct st{ st *jump[L+2], *g[A]; int war, gle; }; int licznik; st *ope[MAX]; st *root=new st; void Init(){ for(int i=0; i<A-1; i++) root->g[i]=nullptr; for(int i=0; i<L; i++) root->jump[i]=root; root->gle=-1; ope[0]=root; } void dodaj(st *v, char c){ if(v->g[c-'a']==nullptr){ st *nowy=new st; for(int i=0; i<A-1; i++) nowy->g[i]=nullptr; 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[c-'a']=nowy; } } void TypeLetter(char c){ licznik++; st *akt=ope[licznik-1]; dodaj(akt, c); akt=akt->g[c-'a']; 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...