Submission #432728

#TimeUsernameProblemLanguageResultExecution timeMemory
432728MounirCrayfish scrivener (IOI12_scrivener)C++14
34 / 100
1093 ms131520 KiB
#include <bits/stdc++.h> #define pb push_back #define sz(x) (int)x.size() using namespace std; const int N = 1e6 + 5; vector<int> ancetres[N]; int prof[N]; char lettre[N]; int noeudInst[N]; int nNoeuds = 0, noeudCur = 0; void dbg(){ /* vector<int> parcours; int noeud = noeudCur; while (noeud > 0){ parcours.pb(noeud); noeud = ancetres[noeud][0]; } reverse(parcours.begin(), parcours.end()); cout << "DBG\n"; for (int e : parcours) cout << lettre[e]; cout << endl;*/ } void Init() { prof[0] = 0; noeudInst[0] = 0; nNoeuds = 1; } void TypeLetter(char L) { int pere = noeudCur; noeudInst[nNoeuds] = nNoeuds; noeudCur = nNoeuds++; prof[noeudCur] = prof[pere] + 1; lettre[noeudCur] = L; ancetres[noeudCur].pb(pere); for (int ind = 0; ind < sz(ancetres[ancetres[noeudCur][ind]]); ++ind) ancetres[noeudCur].pb(ancetres[ancetres[noeudCur][ind]][ind]); dbg(); } void UndoCommands(int U) { noeudCur = noeudInst[nNoeuds - 1 - U]; noeudInst[nNoeuds++] = noeudCur; dbg(); } char GetLetter(int P) { int noeud = noeudCur; for (int i = sz(ancetres[noeud]) - 1; i >= 0; --i){ if (i < sz(ancetres[noeud]) && prof[ancetres[noeud][i]] > P) noeud = ancetres[noeud][i]; } return lettre[noeud]; }
#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...