Submission #62914

#TimeUsernameProblemLanguageResultExecution timeMemory
62914theknife2001Crayfish scrivener (IOI12_scrivener)C++17
0 / 100
1061 ms263168 KiB
#include <bits/stdc++.h> using namespace std; const int N=1e6+55; int trie[N*4][26]; char letter[N]; int p[N][22]; int a[N]; int l[N]; int node; int cnt=1; int k; void Init() { node=cnt++; memset(trie,-1,sizeof trie); } void TypeLetter(char L) { int c=L-'a'; int temp=node; if(trie[node][c]==-1) trie[node][c]=cnt++; node=trie[node][c]; letter[node]=L; a[k]=node; l[k]=l[k-1]+1; p[node][0]=temp; for(int i=1;i<=21;i++) p[node][i]=p[p[node][i-1]][i-1]; // cout<<node<<' '<<l[k]<<' '<<L<<endl; k++; } void UndoCommands(int U) { node=a[k-U-1]; l[k]=l[k-U-1]; a[k]=node; // cout<<a[k]<<' '<<l[k]<<endl; k++; } char GetLetter(int P) { P=l[k-1]-P-1; // cout<<P<<endl; int nd=node; for(int i=21;i>=0;i--) { if(P&(1<<i)) nd=p[nd][i]; } return letter[nd]; }
#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...