Submission #432744

#TimeUsernameProblemLanguageResultExecution timeMemory
432744MounirCrayfish scrivener (IOI12_scrivener)C++14
60 / 100
1087 ms131640 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; for (int e : parcours) cout << prof[e] << " "; cout << endl << 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; int mid = pere; for (int ind = 0; ind < sz(ancetres[mid]); ++ind){ //cout << "anc " << prof[mid] << " " << ind << endl; ancetres[noeudCur].pb(mid); mid = ancetres[mid][ind]; } ancetres[noeudCur].pb(mid); 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...