BZOJ3325 [Scoi2013]密码 【manacher】】的更多相关文章

[BZOJ3325][Scoi2013]密码 Description Fish是一条生活在海里的鱼.有一天他很无聊,就到处去寻宝.他找到了位于海底深处的宫殿,但是一扇带有密码锁的大门却阻止了他的前进.通过翻阅古籍,Fish 得知了这个密码的相关信息: 1. 该密码的长度为N. 2. 密码仅含小写字母. 3. 以每一个字符为中心的最长回文串长度. 4. 以每两个相邻字符的间隙为中心的最长回文串长度. 很快Fish 发现可能有无数种满足条件的密码.经过分析,他觉得这些密码中字典序最小的一个最有可能是…
Description Fish是一条生活在海里的鱼.有一天他很无聊,就到处去寻宝.他找到了位于海底深处的宫殿,但是一扇带有密码锁的大门却阻止了他的前进.通过翻阅古籍,Fish 得知了这个密码的相关信息: 该密码的长度为N. 密码仅含小写字母. 以每一个字符为中心的最长回文串长度. 以每两个相邻字符的间隙为中心的最长回文串长度. 很快Fish 发现可能有无数种满足条件的密码.经过分析,他觉得这些密码中字典序最小的一个最有可能是答案,你能帮他找到这个密码么? 注意:对于两个串A和B,如果它们的前i…
题目 Fish是一条生活在海里的鱼.有一天他很无聊,就到处去寻宝.他找到了位于海底深处的宫殿,但是一扇带有密码锁的大门却阻止了他的前进.通过翻阅古籍,Fish 得知了这个密码的相关信息: 该密码的长度为N. 密码仅含小写字母. 以每一个字符为中心的最长回文串长度. 以每两个相邻字符的间隙为中心的最长回文串长度. 很快Fish 发现可能有无数种满足条件的密码.经过分析,他觉得这些密码中字典序最小的一个最有可能是答案,你能帮他找到这个密码么? 注意:对于两个串A和B,如果它们的前i个字符都相同,而A…
传送门 题意: 现在有一个nnn个小写字母组成的字符串sss. 然后给你nnn个数aia_iai​,aia_iai​表示以sis_isi​为中心的最长回文串串长. 再给你n−1n-1n−1个数bib_ibi​,bib_ibi​表示以si,si+1s_i,s_{i+1}si​,si+1​中间空隙为中心的最长回文串串长. 问你满足条件的所有sss串中字典序最小的那个. 思路: 可以根据aia_iai​和bib_ibi​逆模拟manachermanachermanacher的过程贪心构造这个sss.…
从以每一位为中心的回文串长度可以用Manacher倒推出$O(n)$对相等和不等关系. 将相等的用并查集维护,不等的连边. 然后输出方案时若还没被染过色,则求一个mex. #include<cstdio> #define N 200010 int n,m,i,x,r,p,f[N],g[N],fa[N],a[N],v[30]; struct E{int v;E*nxt;}*j,*h[N],pool[N*2],*cur=pool; inline int min(int a,int b){retur…
题目描述 给出一个只包含小写字母的字符串的长度.以每一个字符为中心的最长回文串长度.以及以每两个相邻字符的间隙为中心的最长回文串长度,求满足条件的字典序最小的字符串. 输入 输入由三行组成.第一行仅含一个整数N,表示密码的长度.第二行包含N 个整数,表示以每个字符为中心的最长回文串长度.第三行包含N - 1 个整数,表示每两个相邻字符的间隙为中心的最长回文串长度.1 <= n <= 10^5. 输出 输出仅一行.输出满足条件的最小字典序密码.古籍中的信息是一定正确的,故一定存在满足条件的密码.…
关于$\mathrm{Manacher}$算法,网上介绍已经很全面 这里说一下自己的理解 这里的$rad$数组:$rad_i$表示以以位置i为中心的最长回文串的回文半径(不包括i这个点). 朴素的思想大概是从每个点出发像两边扩展,大概$O(n^2)$复杂度?据说$\mathrm{Manacher}$是$O(n)$的(不会证,Orz,大概因为每个位置只会被暴力扩展$O(1)$次)这是因为回文串有对称性,我们可以利用这点来优化算法.现在假设我们已经得到了$i$和$i$以前的$rad$值,现在想直接通…
题目大意:给你一个字符串每个位置和相邻两个位置为回文中心的最长回文串长度,让你构造一个合法的字典序最小的字符串 挺有意思的构造题 首先按照$Manacher$的思想还原$p$数组 定义$f_{ij}$表示$i$位置不能放$j$这个字符 我们逆模拟$manacher$的构造过程,如果$i+p_{i}>maxR$,那么多出来这部分都要满足回文性质,然后更新$maxR$ 然后,因为回文不能继续扩展,所以$str[i+p_{i}]!=str[i-p_{i}]$,就在f数组里打上标记 每遍历到一个位置,如…
题目描述: Fish是一条生活在海里的鱼.有一天他很无聊,就到处去寻宝.他找到了位于海底深处的宫殿,但是一扇带有密码锁的大门却阻止了他的前进. 通过翻阅古籍,Fish 得知了这个密码的相关信息: 该密码的长度为N. 密码仅含小写字母. 以每一个字符为中心的最长回文串长度. 以每两个相邻字符的间隙为中心的最长回文串长度. 很快Fish 发现可能有无数种满足条件的密码.经过分析,他觉得这些密码中字典序最小的一个最有可能是答案,你能帮他找到这个密码么? 注意:对于两个串A和B,如果它们的前i个字符都相…
LINK:密码 给出来manacher的数组 让还原出字典序最小的字符串.字符集为小写字母. 当没有任何限制时 放字典序最小的'a'.如果此时还在最长的回文串中的话那么 直接得到当前字符即可. 注意这个过程要在上次放过的位置之后放 不能暴力放 暴力放是n^2的 确定位置跟原来的manacher是一致的. 最困难的是 当前位置不确定 前面那个也同时超出了前面串的回文半径. 随便加一个字符显然可能会出现错误.但是考虑到一个串的回文半径做完之后 当前位置不能和这个串之前的第一个字符相同 我们把这个东西…