Submission #416991

#TimeUsernameProblemLanguageResultExecution timeMemory
416991CollypsoCrayfish scrivener (IOI12_scrivener)C++17
0 / 100
295 ms90752 KiB
#include <bits/stdc++.h> #define ll long long #define ld long double #define pii pair<int, int> #define pll pair<ll, ll> #define vt vector #define pb push_back #define all(x) (x).begin(), (x).end() #define sz(x) (int) (x).size() #pragma GCC optimize ("O3") #pragma GCC optimize ("O2") #define F first #define S second //#define endl '\n' //#define int long long #define inbuf_len 1 << 16 #define outbuf_len 1 << 16 using namespace std; const int const_lg = 20; struct node { char val; int h; vt<int> children, parent; node() { } node(char val_, int parent_, int h_) { val = val_, h = h_; parent.pb(parent_); } }; vt<node> trie; vt<int> commands; void Init() { trie.pb({'#', 0, -1}); commands.pb(0); } void TypeLetter(char L) { int i = *commands.rbegin(); trie[i].children.pb(sz(trie)); trie.pb({L, i, trie[i].h + 1}); for(int i = 1, v = sz(trie) - 1; trie[i - 1].val != '#'; i++) { //cout << v << " " << i << " " << trie[trie[v].parent[i - 1]].parent.size() << endl; trie[v].parent.pb(trie[trie[v].parent[i - 1]].parent[i - 1]); //cout << "ok" << endl; } commands.pb(sz(trie) - 1); } void UndoCommands(int U) { int n = sz(commands); commands.pb(commands[n - U - 1]); } char GetLetter(int P) { int v = *commands.rbegin(); for(int k = sz(trie[v].parent) - 1; k >= 0; k = min(k - 1, sz(trie[v].parent) - 1)) if (trie[trie[v].parent[k]].h >= P ) v = trie[v].parent[k]; return trie[v].val; }
#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...