Submission #857885

#TimeUsernameProblemLanguageResultExecution timeMemory
857885sleepntsheepCrayfish scrivener (IOI12_scrivener)C++17
12 / 100
452 ms93356 KiB
#include <cstdio>
#include <cstring>
#include <cassert>
#include <string>
#include <deque>
#include <vector>
#include <map>
#include <queue>
#include <algorithm>
#include <iostream>
#include <utility>
using namespace std;
using ll=long long;

#define ALL(x) x.begin(), x.end()

int p[20][1<<20], a[1<<20], ptr, dep[1<<20];
vector<int> chain;

void Init()
{
}

void TypeLetter(char l)
{
    a[1+ptr] = l; p[0][1+ptr] = ptr; dep[1+ptr] = dep[ptr]+1;
    for (int j = 1; j < 20; ++j) p[j][1+ptr] = p[j-1][p[j-1][1+ptr]];
    chain.push_back(++ptr); a[ptr] = l;
}

void UndoCommands(int u)
{
    ptr=chain[max((int)chain.size()-u-1, 0)]; chain.push_back(ptr);
}

char GetLetter(int k)
{
    int c = ptr; k = dep[c] - k-1;
    for (int j = 20; j--;) if (k & (1 << j)) c = p[j][c];
    return a[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...