问一个关于AC自动机跳fail的问题
查看原帖
问一个关于AC自动机跳fail的问题
912738
Nine_Suns楼主2023/7/17 07:44

这是我用来统计答案的部分。

可以 AC:


void calc (char* s) {
	int idx = 0; vis[0] = 1;
	for (int i = 1;i <= strlen(s+1);i++) {
		idx = ch[idx][op[s[i]]]; 
		int j = idx;
		while (!vis[j]) vis[j] = 1, j = fail[j];
	}
}

TLE:

void calc (char* s) {
	int idx = 0; vis[0] = 1;
	for (int i = 1;i <= strlen(s+1);i++) {
		idx = ch[idx][op[s[i]]]; vis[idx] = 1;
		int j = idx;
		while (!vis[fail[j]]) vis[fail[j]] = 1, j = fail[j];
	}
}

两份代码仅有跳 fail 时的操作不同,有没有大佬解释一下?

2023/7/17 07:44
加载中...