제출 #834764

#제출 시각아이디문제언어결과실행 시간메모리
834764happypotato크레이피쉬 글쓰는 기계 (IOI12_scrivener)C++17
34 / 100
314 ms262144 KiB
#include <bits/stdc++.h> using namespace std; #define pb push_back struct Trie { char c; int len; Trie *nxt[4]; Trie(char cur = '.'): c(cur), len(0) { for (int i = 0; i < 4; i++) nxt[i] = nullptr; }; }; vector<Trie*> ver; int cnt = 0; Trie *cur, *pre; void Init() { cur = new Trie(); cnt++; function<void(Trie*, int)> build = [&](Trie *cur, int depth) { if (depth < 0) return; for (int i = 0; i < 4; i++) { cur->nxt[i] = new Trie(); build(cur->nxt[i], depth - 2); } cnt += 4; }; build(cur, 18); ver.pb(cur); } void TypeLetter(char L) { cur = new Trie(); cnt++; pre = ver.back(); ver.pb(cur); for (int i = 18; i >= 0; i -= 2) { cur->len = pre->len; int tar = cur->len++; for (int j = 0; j < 4; j++) { cur->nxt[j] = pre->nxt[j]; } int dest = ((tar >> i) & 3); pre = cur->nxt[dest]; cur->nxt[dest] = new Trie(); cur = cur->nxt[dest]; cnt++; } cur->c = L; } void UndoCommands(int U) { cur = new Trie(); cnt++; int ptr = (int)(ver.size()) - 1 - U; for (int i = 0; i < 4; i++) { cur->nxt[i] = ver[ptr]->nxt[i]; } cur->len = ver[ptr]->len; ver.pb(cur); } char GetLetter(int P) { cur = ver.back(); for (int i = 18; i >= 0; i -= 2) { int dest = ((P >> i) & 3); cur = cur->nxt[dest]; } // cerr << cnt << endl; return cur->c; }
#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...