![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
manacher
文章平均质量分 58
Clove_unique
All that you have lost can be won back bit by bit as long as you wish for it.
展开
-
[BZOJ2160]拉拉队排练(manacher+快速幂)
题目描述传送门题解首先求出来所有的极长回文串的长度。 然后从大到小枚举长度,用快速幂计算同一个长度的答案,然后再这些回文串加到当前长度-2的里面去。 时间复杂度O(n)O(n)代码#include<iostream>#include<cstring>#include<cstdio>using namespace std;#define LL long long#define Mod 1原创 2016-12-19 23:34:57 · 659 阅读 · 0 评论 -
Manacher 回文自动机 学习笔记
Manacher“马拉车”算法非常好写好调的回文串算法。 用途:在O(n)O(n)时间内,求出以每一个点为中心的回文串长度。首先,有一个非常巧妙的转化。由于回文串长度有可能为奇数也有可能为偶数,说明回文中心不一定在一个字符上。所以要将字符串做如下处理:在每两个字母之间插入一个特殊字符,通常用“#”,这样所有的回文串就都变成了以一个字符为回文中心的。并且,我们需要在字符串的开头或者结尾插入另一个特殊原创 2016-12-19 23:14:20 · 6923 阅读 · 2 评论 -
[BZOJ1414][ZJOI2009]对称的正方形(manacher+单调栈+二分)
题目描述传送门题解跟这道题gang了半晚上,写出来了一个理论复杂度O(n2log2n)O(n^2log^2n)的做法,然后各种剪枝各种砍常数,最后竟然A了… 网上题解貌似是二分+hash?好像也有用manacher+单调队列并且时间复杂度科学的方法,不过各种看不懂…首先我们参考manacher的做法,将一些分隔符插入矩阵,来处理奇数偶数 并且对于每一个点都求出来它横纵的最长回文子串 然后枚举对原创 2017-01-11 20:17:28 · 1225 阅读 · 0 评论 -
[BZOJ2084][Poi2010]Antisymmetry(hash+二分||manacher)
题目描述传送门题解判断是否是反对称的一眼hash啊,关键是怎么求区间个数呢? 反对称也是对称啊!——由对称中心到两遍的长度满足单调性!即短的不是反对称的那么比这个长的一定不是反对称的。 那么我们可以枚举反对称的中心,然后二分反对称的长度。每一次判断的时候首先用hash预处理出来前缀和,然后每一次把短的乘上一个幂次就可以实现O(1)O(1)判断,总的复杂度是O(nlogn)O(nlogn)的。原创 2016-11-10 23:56:11 · 789 阅读 · 0 评论 -
[BZOJ2565]最长双回文串(manacher)
题目描述传送门题解这道题实际上是求不重叠且相邻的两个串拼在一起的最长长度。 将字符中间都插入#了之后问题转化为对于每一个#求它左边和右边回文串能覆盖到它的最远的回文中心。 这个满足单调性,求出以每一个点为对称中心的最长回文串了之后扫两遍就可以了。代码#include<iostream>#include<cstring>#include<cstdio>using namespace std;原创 2016-12-19 23:26:46 · 616 阅读 · 0 评论 -
[BZOJ2342][Shoi2011]双倍回文(manacher)
题目描述传送门题解这道题非常有趣的是,要将一个字符串劈开两次都是回文串。 实际上manacher了之后对于每一个大中心暴力找小中心就可以了,因为只有26个字符暴力是无法卡掉的。不过如果时间复杂度科学的话貌似可以写平衡树或者可持久化线段树之类的东西。代码#include<iostream>#include<cstring>#include<cstdio>using namespace std;原创 2016-12-19 23:31:41 · 829 阅读 · 0 评论 -
[BZOJ3790]神奇项链(manacher+贪心)
题目描述传送门题解由于可以重叠,问题变为求出所有极长回文串了之后问最少用几个将序列全部覆盖。 这就是一个线段覆盖问题嘛。 从左向右一遍贪心。。。代码#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>using namespace std;#define N 100005char a[N],s[N]原创 2016-12-19 23:37:37 · 819 阅读 · 0 评论 -
[BZOJ3160]万径人踪灭(FFT+manacher)
题目描述传送门题目大意:在一个只含ab的字符串中选取一个子序列,使得:1、字符和下标都关于一个中心对称2、不能是连续的一段。求方案数。题解这题我的方法好蠢啊→_→ 首先容斥一下,答案=所有子序列的方案数-回文子串的数量 由于回文的连续子序列一定满足下标对称,所以可以直接用manacher求出回文子串的数量 然后就是统计所有子序列的方案数的问题了 将a和b分开考虑,f(i)和g(i)表示当前这原创 2017-04-24 14:37:35 · 808 阅读 · 0 评论