Submission #104241

#TimeUsernameProblemLanguageResultExecution timeMemory
104241arman_ferdousCrayfish scrivener (IOI12_scrivener)C++14
34 / 100
1092 ms190484 KiB
// #include "grader.h" #include <bits/stdc++.h> using namespace std; struct node{ char c; int d; node *to[26]; vector<node*> p; node() { d = -1; for(int i = 0; i < 26; i++) to[i] = NULL; } }; using pnode = node*; pnode root, trie_pos; pnode state[1000010]; int ptr; void Init() { root = new node(); ptr = 0; state[0] = root; trie_pos = root; } void TypeLetter(char L) { int id = L - 'a'; if(!trie_pos->to[id]) trie_pos->to[id] = new node(); trie_pos->to[id]->d = trie_pos->d + 1; // update depth trie_pos->to[id]->p.push_back(trie_pos); // set new childs parent trie_pos = trie_pos->to[id]; // move it to child state[++ptr] = trie_pos; // update state vector trie_pos->c = L; // update containing char for(int j = 1; j < 20; j++) { if(trie_pos->p[j-1]) { if((trie_pos->p[j-1])->p.size() > j-1) trie_pos->p.push_back((trie_pos->p[j-1])->p[j-1]); else break; } else break; } } void UndoCommands(int U) { state[ptr+1] = state[max(0,ptr-U)]; ptr++; trie_pos = state[ptr]; } char GetLetter(int P) { pnode cur = trie_pos; int need = trie_pos->d - P; for(int j = 19; j >= 0; j--) if(need >= (1<<j)) { need -= (1<<j); cur = cur->p[j]; } return cur->c; }

Compilation message (stderr)

scrivener.cpp: In function 'void TypeLetter(char)':
scrivener.cpp:39:36: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    if((trie_pos->p[j-1])->p.size() > j-1)
       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~
#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...