一些神秘小优化
字符串
优化枚举次数
注意到对于一个字符串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\) 进制的数,直接转十进制即可。
图论
最短路
注意到跑分层图需要建很多点和边,对空间

浙公网安备 33010602011771号