Submission #151955

# Submission time Handle Problem Language Result Execution time Memory
151955 2019-09-05T16:03:29 Z karma Crayfish scrivener (IOI12_scrivener) C++14
100 / 100
724 ms 94404 KB
#include <bits/stdc++.h>
#define ll      long long
#define pb      emplace_back
#define mp      make_pair
#define fi      first
#define se      second

using namespace std;

const int N = int(1e6) + 1;
const int logN = 21;

int cur, p[N][logN], ver[N], len[N];
char c[N];

void Init() {cur = 0;}

void TypeLetter(char ch) {
     ver[cur] = cur, c[cur] = ch;
     p[cur][0] = cur? ver[cur - 1]: cur;
     len[cur] = len[p[cur][0]] + 1;
     for(int i = 1; i < logN; ++i) p[cur][i] = p[p[cur][i - 1]][i - 1];
     ++cur;
}

void UndoCommands(int k) {
     ver[cur] = ver[cur - k - 1];
     ++cur;
}

char GetLetter(int k) {
     int  pos = ver[cur - 1];
     k = len[pos] - k - 1;
     for(int i = logN - 1; i >= 0; --i)
        if((k >> i) & 1) pos = p[pos][i];
     return c[pos];
}

//int main()
//{
//    ios_base::sync_with_stdio(0);
//    cin.tie(0), cout.tie(0);
//    if(fopen("test.inp", "r")) {
//        freopen("test.inp", "r", stdin);
//        freopen("test.out", "w", stdout);
//    }
//    Init();
//    TypeLetter('a');// a
//    TypeLetter('b');// ab
//    cout << GetLetter(1) << '\n';// b ab
//    TypeLetter('d');// abd
//    UndoCommands(2);// a
//    UndoCommands(1);// abd
//    cout << GetLetter(2) << '\n';// d abd
//    TypeLetter('e');// abde
//    UndoCommands(1);// abd
//    UndoCommands(5);// ab
//    TypeLetter('c');// abc
//    cout << GetLetter(2) << '\n';// c abc
//    UndoCommands(2);// abd
//    cout << GetLetter(2) << '\n';// d abd
//}
# Verdict Execution time Memory Grader output
1 Correct 2 ms 376 KB Output is correct
2 Correct 2 ms 376 KB Output is correct
3 Correct 2 ms 376 KB Output is correct
4 Correct 2 ms 376 KB Output is correct
5 Correct 2 ms 376 KB Output is correct
6 Correct 2 ms 376 KB Output is correct
7 Correct 2 ms 376 KB Output is correct
8 Correct 2 ms 376 KB Output is correct
9 Correct 2 ms 376 KB Output is correct
10 Correct 2 ms 376 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 376 KB Output is correct
2 Correct 2 ms 376 KB Output is correct
3 Correct 2 ms 504 KB Output is correct
4 Correct 2 ms 376 KB Output is correct
5 Correct 2 ms 376 KB Output is correct
6 Correct 2 ms 376 KB Output is correct
7 Correct 2 ms 504 KB Output is correct
8 Correct 2 ms 376 KB Output is correct
9 Correct 2 ms 376 KB Output is correct
10 Correct 2 ms 376 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 3 ms 504 KB Output is correct
2 Correct 3 ms 632 KB Output is correct
3 Correct 3 ms 760 KB Output is correct
4 Correct 3 ms 760 KB Output is correct
5 Correct 3 ms 760 KB Output is correct
6 Correct 4 ms 764 KB Output is correct
7 Correct 4 ms 760 KB Output is correct
8 Correct 3 ms 760 KB Output is correct
9 Correct 4 ms 760 KB Output is correct
10 Correct 4 ms 760 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 515 ms 67192 KB Output is correct
2 Correct 560 ms 83952 KB Output is correct
3 Correct 411 ms 84088 KB Output is correct
4 Correct 396 ms 89336 KB Output is correct
5 Correct 495 ms 78200 KB Output is correct
6 Correct 451 ms 90876 KB Output is correct
7 Correct 513 ms 80120 KB Output is correct
8 Correct 515 ms 88776 KB Output is correct
9 Correct 611 ms 84840 KB Output is correct
10 Correct 262 ms 94404 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 637 ms 61692 KB Output is correct
2 Correct 691 ms 57136 KB Output is correct
3 Correct 398 ms 71416 KB Output is correct
4 Correct 399 ms 63948 KB Output is correct
5 Correct 485 ms 81704 KB Output is correct
6 Correct 431 ms 84112 KB Output is correct
7 Correct 477 ms 84008 KB Output is correct
8 Correct 613 ms 72720 KB Output is correct
9 Correct 724 ms 69624 KB Output is correct
10 Correct 260 ms 93144 KB Output is correct