Submission #169311

# Submission time Handle Problem Language Result Execution time Memory
169311 2019-12-19T16:25:12 Z AlexLuchianov Crayfish scrivener (IOI12_scrivener) C++14
100 / 100
816 ms 85880 KB
#include <iostream>

int const nmax = 1000000;

using ll = long long;
#define MIN(a, b) (((a) < (b)) ? (a) : (b))
#define MAX(a, b) (((a) < (b)) ? (b) : (a))

char last;

int far[20][1 + nmax], ptr = 0;
int level[1 + nmax];
char chr[1 + nmax];

void Init() {}

void TypeLetter(char L) {
  ++ptr;
  far[0][ptr] = ptr - 1;
  for(int h = 1; h < 20; h++)
    far[h][ptr] = far[h - 1][far[h - 1][ptr]];
  level[ptr] = level[ptr - 1] + 1;
  chr[ptr] = L;
}

void UndoCommands(int U) {
  ++ptr;
  far[0][ptr] = far[0][ptr - 1 - U];
  for(int h = 1; h < 20; h++)
    far[h][ptr] = far[h - 1][far[h - 1][ptr]];
  level[ptr] = level[ptr - 1 - U];
  chr[ptr] = chr[ptr - 1 - U];
}

char GetLetter(int P) {
  int target = level[ptr] - 1 - P;
  int pos = ptr;

  for(int h = 19; 0 <= h; h--)
    if((target & (1 << h)))
      pos = far[h][pos];

  return chr[pos];
}
# Verdict Execution time Memory Grader output
1 Correct 2 ms 504 KB Output is correct
2 Correct 2 ms 504 KB Output is correct
3 Correct 2 ms 504 KB Output is correct
4 Correct 2 ms 504 KB Output is correct
5 Correct 2 ms 504 KB Output is correct
6 Correct 2 ms 504 KB Output is correct
7 Correct 2 ms 504 KB Output is correct
8 Correct 2 ms 504 KB Output is correct
9 Correct 2 ms 504 KB Output is correct
10 Correct 2 ms 504 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 504 KB Output is correct
2 Correct 2 ms 504 KB Output is correct
3 Correct 2 ms 504 KB Output is correct
4 Correct 2 ms 504 KB Output is correct
5 Correct 2 ms 504 KB Output is correct
6 Correct 2 ms 504 KB Output is correct
7 Correct 2 ms 504 KB Output is correct
8 Correct 2 ms 504 KB Output is correct
9 Correct 2 ms 504 KB Output is correct
10 Correct 2 ms 508 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 632 KB Output is correct
2 Correct 3 ms 760 KB Output is correct
3 Correct 3 ms 888 KB Output is correct
4 Correct 3 ms 888 KB Output is correct
5 Correct 3 ms 760 KB Output is correct
6 Correct 3 ms 888 KB Output is correct
7 Correct 3 ms 888 KB Output is correct
8 Correct 3 ms 888 KB Output is correct
9 Correct 3 ms 888 KB Output is correct
10 Correct 4 ms 888 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 355 ms 60020 KB Output is correct
2 Correct 440 ms 73212 KB Output is correct
3 Correct 383 ms 72788 KB Output is correct
4 Correct 453 ms 76280 KB Output is correct
5 Correct 396 ms 67320 KB Output is correct
6 Correct 320 ms 79452 KB Output is correct
7 Correct 814 ms 67964 KB Output is correct
8 Correct 749 ms 76548 KB Output is correct
9 Correct 405 ms 73616 KB Output is correct
10 Correct 291 ms 82896 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 502 ms 55152 KB Output is correct
2 Correct 575 ms 47676 KB Output is correct
3 Correct 370 ms 60668 KB Output is correct
4 Correct 406 ms 52600 KB Output is correct
5 Correct 328 ms 70536 KB Output is correct
6 Correct 358 ms 72884 KB Output is correct
7 Correct 350 ms 72824 KB Output is correct
8 Correct 816 ms 61360 KB Output is correct
9 Correct 708 ms 64476 KB Output is correct
10 Correct 288 ms 85880 KB Output is correct