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;
}
我太弱了只能感性理解。
posted @ 2022-11-13 10:50  Cotsheep  阅读(22)  评论(0编辑  收藏  举报