2022.11.13
P3435
KMP练习题,注意记忆化,不然会被 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
卡死。
P8085
淦了一个假的算法竟然拿了一大半分。
这题是 KMP 好题,处理方法非常智慧,你需要把 KMP 的判断魔改一下。
思路:
《容易发现》两字符串匹配时只跟相同字符之间的关系有关,那么我们用该字符与上一个自己的位置的距离来匹配,将第一次出现的字符设为 \(inf\)。
但是这样不能直接用来判断,因为有一些特殊情况,我们需要魔改 \(check\)。
\(\text{like this}\):
bool check1(int i, int k){//预处理kmp的check
if(t[k + 1] == N && t[i] < k + 1)return false;
if(t[k + 1] != N && ot[i] != ot[i - t[k + 1]])return false;
return true;
}
bool check2(int i, int k){//匹配时的check
if(t[k + 1] == N && s[i] < k + 1)return false;
if(t[k + 1] != N && os[i] != os[i - t[k + 1]])return false;
return true;
}