Submission #393264

#TimeUsernameProblemLanguageResultExecution timeMemory
393264Hazem크레이피쉬 글쓰는 기계 (IOI12_scrivener)C++17
60 / 100
1090 ms86596 KiB
#include <iostream>
//#include "grader.h"

using namespace std;
 
#define S second
#define F first
#define LL long long 
 
const int N = 1e6+1;
const LL MOD = 1e9+7;
const LL LINF = 1e18;
const LL INF = 1e9;


char s[N];
int par[21][N],len[N];
int cnt = 1;

char last;

void Init() {}

void buildst(int x,int pr){
	
	par[0][x] = pr;
	len[x] = len[pr];
	int cur = pr;
	for(int i=1;i<=20;i++)
		par[i][x] = par[i-1][cur],cur = par[i-1][cur];
}

void TypeLetter(char L) {

	buildst(cnt,cnt-1);
	len[cnt]++;
	s[cnt] = L;
	cnt++;
}

void UndoCommands(int U) {
	
	buildst(cnt,cnt-U-1);
	cnt++;
}

char GetLetter(int P) {
	
	cnt--;
	
	P++;
	int cur = cnt;
	for(int i=20;i>=0;i--)
		if(len[par[i][cur]]>=P)cur = par[i][cur];
	
	cnt++;
	return s[cur];
}
#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...