Submission #7280

#TimeUsernameProblemLanguageResultExecution timeMemory
7280kriiiCrayfish scrivener (IOI12_scrivener)C++98
100 / 100
612 ms176648 KiB
#include <vector> #include <map> using namespace std; map<char, int> trie[1000001]; int prv[1000001][20]; int node,now,time,hist[1000001],len[1000001]; char last[10000001]; void Init() {} void TypeLetter(char L) { int &n = trie[now][L]; if (n == 0){ n = ++node; prv[n][0] = now; for (int i=1;i<20;i++){ prv[n][i] = prv[prv[n][i-1]][i-1]; if (!prv[n][i]) break; } len[n] = len[now] + 1; last[n] = L; } hist[++time] = now = n; } void UndoCommands(int U) { now = hist[time-U]; hist[++time] = now; } char GetLetter(int P) { int x = now; P = len[x] - P - 1; for (int i=0;i<20;i++) if (P & (1 << i)) x = prv[x][i]; return last[x]; }
#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...