一些神秘小优化

字符串

优化枚举次数

注意到对于一个字符串S,假设其形态如下:

.....a.....a.....c

我们要找到 ac 这个子串(位置不同视为同一个),其实只需要找第一个 a 和这个字符后面的第一个 c 即可。
死因:

点击查看代码
void check(int i , int j , string t){
	if(i>n)return;
	if(i>0){
		t += s2[j-1];
		vis[t]++;
		if(vis[t]==1)ans++;
	}
	if(j>=n)return;
	while(i<=n){//实际上这个while可以去掉
		check(to[i][s2[j]-'a'],j+1,t);
		i = to[i][s2[j]-'a'] + 1;
	}
}

哈希

应该都会,这个比什么 \(KMP\),后缀排序等好用多了。
具体方法:将每个字符看作一个数,整个字符串为 \(base\) 进制的数,直接转十进制即可。

图论

最短路

注意到跑分层图需要建很多点和边,对空间

posted @ 2026-06-06 16:19  虚空远行者  阅读(6)  评论(0)    收藏  举报