KMP
616156
赛高______↑
展开
-
【凸包】【KMP】Codeforces1017E The Supersonic Rocket
分析: 。。。第一次见CF服务器炸了,还好最后unrated了,不然这次死惨。。。 很容易想到,这两个多边形的凸包能通过旋转、平移最终重合,就必然满足条件。 所以就是判断两多边形是否全等。 额。。题解就是标题:顺时针地把两个凸包每个边的长度、每个点的旋转角储存下来(长度不开根号,旋转角用差积表示,这样都是整数)。 如果这两个序列能完全匹配,则说明能够重合。方法就是把其中一个串复制一遍粘在...原创 2018-08-09 10:44:11 · 224 阅读 · 0 评论 -
【总结】【字符串】AC自动机&KMP算法
前言: AC自动机与KMP算法,都是用于优化字符串匹配的算法。 KMP算法应用于单模式串的匹配。 而AC自动机是应用于多模式串的匹配。 但并不意味着KMP算法可以被完全取代(尽管两者的算法思想本质上是一样的)。 KMP算法: 相对而言,KMP算法比较容易一些。 首先,考虑如何暴力匹配?很显然,可以以主串的任意一个位置开头,然后开始匹配,失配后,再找下一个位置开头。 这样的复杂度显然是O(n*m)的...原创 2018-10-22 19:43:58 · 457 阅读 · 0 评论 -
【KMP】【字符串】BZOJ4974字符串大师
分析: 在KMP算法中,failfailfail指针有一个特殊的性质,i−failii-fail_ii−faili是前i个字符的最小循环节大小。 所以这题相当于就是说,给了你每个点的fail指针,求一个满足的字符串。 那么按照建fail指针的方式倒过来做就好了 #include<cstdio> #include<cstring> #include<cmath>...原创 2018-10-22 19:56:40 · 268 阅读 · 0 评论 -
【字符串】【KMP】BZOJ3670动物园
分析: 不算太难的fail指针应用题。每次利用fail指针在上一个位置的匹配信息,不停地向下匹配,如果超过一半则退回去即可。 #include<cstdio> #include<cstring> #include<cmath> #include<vector> #include<map> #define SF scanf #define ...原创 2018-10-22 20:11:41 · 241 阅读 · 0 评论 -
【KMP】【字符串】BZOJ4560字符串覆盖
分析: 这题与KMP唯一的关系就是个判断。。。 首先,利用KMP算出哪些位置可以匹配。 然后显然有个DP[i][j]表示前i个字符,凑出的状态为j。为了处理相交情况,所以每次向后转移都必须枚举很多位置。然后可以利用后缀数组优化,DP[i]=DP[j]+i-j这种形式的DP,可以先把DP[j]-j存下来,然后读取的时候直接读该位置的最大/最小值+i即可。 #include&lt;cstdio&gt;...原创 2018-10-22 20:19:01 · 291 阅读 · 0 评论 -
【字符串】【高斯消元】【KMP】BZOJ4820硬币游戏
分析: 如果数据范围再小点,可以利用BZOJ1444有趣的游戏方法来做。 所以这里为了优化,直接存储下来从某个字符串转移到另一个的概率即可。 #include&lt;cstdio&gt; #include&lt;cstring&gt; #include&lt;cmath&gt; #include&lt;vector&gt; #define SF scanf #define PF p原创 2018-10-22 20:21:55 · 178 阅读 · 0 评论 -
【KMP】BZOJ2384[Ceoi2011]Match
分析: 首先,可以转化判定条件:如果在一段数中,每一个数左侧,比它小的数和给出的目标序列相同。那么就能认为这段数的大小关系合法。 然后就可以魔改KMP来做了。 所谓魔改,就是之前本来是判定两个字符是否相同,而这里变为判断当前已加入的左侧的数中,比它小的数是否合法。 但是为了高效修改,需要借助树状数组优化修改。 其余部分和KMP较为类似。 #include<cstdio> #includ...原创 2018-10-22 20:39:02 · 453 阅读 · 0 评论