Submission #79062

# Submission time Handle Problem Language Result Execution time Memory
79062 2018-10-11T02:27:06 Z TAMREF Crayfish scrivener (IOI12_scrivener) C++11
22 / 100
707 ms 59320 KB
#include <bits/stdc++.h>
using namespace std;
const int mx = 1e6 + 5;
const int lg = 20;
/*
struct node{
    node(){}
    node(int c, char x, int i) : c(c),x(x),i(i) {
        memset(p,-1,sizeof(p));
    }
    int p[lg], c;
    char x;
    int i;
    void show(){
        printf("x = %c, i = %d, c = %d\n",x,i,c);
    }
};
*/
int C[mx], I[mx];
char X[mx];
int p[lg][mx];
//vector<node> N;
int n;

void Init() {
    //memset(p,-1,sizeof(p));
}

void TypeLetter(char L) {
    ++n;
    //printf("Type(%c)\n",L);
    //printf("");
    //N.emplace_back();
    //puts("f1");
    //N[n] = node(0, L, !n ? 0 : N[n-1].i + 1);
    I[n] = I[n-1] + 1;
    C[n] = n;
    X[n] = L;
    p[0][n] = n - 1;
    for(int j = 1; j < lg; j++){
        if(!p[j-1][n]) break;
        else{
            p[j][n] = p[j-1][p[j-1][n]];
        }
    }
    //puts("f2");
    //node &x = N[n];
    //puts("f3");
    //x.p[0] = (!n ? -1 : n-1);
    //puts("f4");
    /*
    for(int j = 1; j < lg; j++){
        //printf("j = %d\n",j);
        if(x.p[j-1] != -1) x.p[j] = N[x.p[j-1]].p[j-1];
        else break;
    }
    */
    //puts("f5");
    //x.c = n;
    //N[n].show();
}

void UndoCommands(int U) {
    ++n;
    //printf("Undo(%d)\n",U);
    //N.emplace_back();
    if(U == n){
        I[n] = 0;
        C[n] = 0;
        X[n] = 'U';
        //N[n] = node(-1, 'U', -1);
        //node &x = N[n];
        //++n;
        return;
    }
    /*
    node p = N[n - 1 - U];
    N[n] = node(p.c, 'U', p.i);
    node &x = N[n];
    x.p[0] = n - 1 - U;
    for(int j = 1; j < lg; j++){
        if(x.p[j-1] != -1) x.p[j] = N[x.p[j-1]].p[j-1];
        else break;
    }
    */
    I[n] = I[n - 1 - U];
    C[n] = C[n - 1 - U];
    p[0][n] = n - 1 - U;
    for(int j = 1; j < lg; j++){
        if(!p[j-1][n]) break;
        else{
            p[j][n] = p[j-1][p[j-1][n]];
        }
    }
    //N[n].show();
    //++n;
}

char GetLetter(int P) {
    //printf("Get(%d)\n",P);
    //node b = N[n-1];
    ++P;
    int b = n;
    for(int j = lg; j >= 0; j--){
        if(I[b] == P) return X[C[b]];
        if(p[j][b] && I[p[j][b]] >= P) b = p[j][b];
    }
    /*
    for(int j = lg; j >= 0; j--){
        if(b.i == P) return N[b.c].x;
        if(b.p[j] != -1 && N[b.p[j]].i >= P) b = N[b.p[j]];
    }
    */
    //printf("bi : %d\n",b->i);
    //puts("asdf");
    //return b.i == P ? N[b.c].x : N[N[b.p[0]].c].x;
    return I[b] == P ? X[C[b]] : X[C[p[0][b]]];
}
# Verdict Execution time Memory Grader output
1 Correct 2 ms 504 KB Output is correct
2 Correct 2 ms 624 KB Output is correct
3 Correct 2 ms 624 KB Output is correct
4 Correct 2 ms 624 KB Output is correct
5 Correct 2 ms 624 KB Output is correct
6 Correct 2 ms 632 KB Output is correct
7 Correct 2 ms 688 KB Output is correct
8 Runtime error 7 ms 716 KB Execution killed with signal 11 (could be triggered by violating memory limits)
9 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 804 KB Output is correct
2 Correct 2 ms 932 KB Output is correct
3 Correct 3 ms 932 KB Output is correct
4 Runtime error 6 ms 932 KB Execution killed with signal 11 (could be triggered by violating memory limits)
5 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 960 KB Output is correct
2 Correct 3 ms 1216 KB Output is correct
3 Correct 4 ms 1216 KB Output is correct
4 Correct 3 ms 1216 KB Output is correct
5 Correct 3 ms 1216 KB Output is correct
6 Correct 3 ms 1216 KB Output is correct
7 Correct 5 ms 1216 KB Output is correct
8 Correct 3 ms 1232 KB Output is correct
9 Correct 3 ms 1232 KB Output is correct
10 Correct 4 ms 1232 KB Output is correct
# Verdict Execution time Memory Grader output
1 Incorrect 427 ms 59320 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 707 ms 59320 KB Output isn't correct
2 Halted 0 ms 0 KB -