
Manacher
winhcc
这个作者很懒,什么都没留下…
展开
-
poj 3974
找一个字符串的最长回文字。 manacher模板题 manacher就是往原字符串里面加别的字符,使得得到的串是偶数的,然后求mp数组, mp[i]表示以i为中点的最长回文长度 #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int ma...原创 2019-04-28 21:39:18 · 284 阅读 · 0 评论 -
hdu 4516
给你个“串”,让你找最长回文字串,其中回文字串要像是山峰的形状。 为了不影响原来的串,要加比较大的数字。 计算mp时要注意两边的小,中间的大,由于添了其他的数字,所以间隔是2 #include <cstdio> #include <algorithm> #include <cstring> using namespace std; int t,n,a[1...原创 2019-04-29 19:33:26 · 148 阅读 · 0 评论 -
hdu 3294
先把字符串转换一下,然后求mp[]。 加了其他字符后,2k ,k = 1,2,…的位置实际上是原来的k/2-1的字符。 所以求得最长半径r和对应位置pos后, 对应的原数组下标就是[(pos-r+1)/2 -1,(pos+r-1)/2-1],一边加一边减是因为加入新字符后回文字串的最外层一定是特殊字符 #include <cstdio> #include <cstring>...原创 2019-04-29 19:40:28 · 266 阅读 · 0 评论 -
Lightoj 1258
给一个字符串,只能再右边加字符,问构成回文串最少要多少个字符。 可以知道,只有当回文串的右边延伸到最右端才可能构成一组解 然后利用mp[i] - 1 的含义是回文半径,并且最左右段都是原数组的字符。 判断一下即可 #include <cstdio> #include <algorithm> #include <cstring> #include <iost...原创 2019-04-29 20:25:51 · 214 阅读 · 0 评论