bzoj 3676 回文串 manachar+hash】的更多相关文章

考虑每个回文串,它一定是它中心字母的最长回文串两侧去掉同样数量的字符后的一个子串. 所以我们可以用manachar求出每一位的回文半径,放到哈希表里并标记出它的下一个子串. 最后拓扑排序递推就行了... 这道题丧心病狂卡哈希....wa了一屏... #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<queue> #include&l…
BZOJ 3676 回文串 Problem's Link: http://www.lydsy.com/JudgeOnline/problem.php?id=3676 Mean: 略 analyse: 由于构造完回文自动机后,len[i]表示第i个回文串的长度,cnt[i]表示第i个回文串出现的次数,只需两者相乘去最大就可. 注意:i是从2开始,因为有两个长度为0和长度为-1的节点. Time complexity: O(N) Source code:  ; ; ; ;             ;…
Description 考虑一个只包含小写拉丁字母的字符串\(s\).我们定义\(s\)的一个子串\(t\)的"出现值"为\(t\)在\(s\)中的出现次数乘以\(t\)的长度.请你求出\(s\)的所有回文子串中的最大出现值. Input 输入只有一行,为一个只包含小写字母a-z的非空字符串\(s\). Output 输出一个整数,为所有回文子串的最大出现值. Sample Input1 abacaba Sample Input2 www Sample Output1 7 Sample…
题意: 一个回文的价值为长度 * 出现次数,问一个串中的子串的最大回文价值 思路: 回文树模板题,跑PAM,然后计算所有节点出现次数. 参考: 回文串问题的克星--Palindrome Tree(回文树) 代码: #include<map> #include<set> #include<cmath> #include<cstdio> #include<stack> #include<ctime> #include<vector&…
https://vjudge.net/problem/HYSBZ-3676 题意 考虑一个只包含小写拉丁字母的字符串s.我们定义s的一个子串t的“出 现值”为t在s中的出现次数乘以t的长度.请你求出s的所有回文子串中的最 大出现值. 分析 回文树模板题 #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include <string> #inc…
3676: [Apio2014]回文串 Time Limit: 20 Sec  Memory Limit: 128 MB Submit: 1680  Solved: 707 [Submit][Status][Discuss] Description 考虑一个只包含小写拉丁字母的字符串s.我们定义s的一个子串t的"出  现值"为t在s中的出现次数乘以t的长度.请你求出s的所有回文子串中的最  大出现值. Input 输入只有一行,为一个只包含小写字母(a -z)的非空字符串s. Outp…
题目描述 $ASDFZ$的机房中不仅有红太阳,还有蓝太阳和原谅色太阳.有一天,太阳们来到机房,发现桌上有不知道哪个蒟蒻放上的问题:令$F(A,B)$表示选择一个串$A$的非空前缀$S$和串$B$的非空后缀$T$使得将串$S$和串$T$拼起来之后是回文串的方案数.现在给定两个串$A$和$B$,令$A_i$表示串$A$的第$i$长的后缀,$B_i$为串$B$的第$i$长的前缀.有$Q$组询问,第$i$组询问给定$x_i$和$y_i$,对每组询问求$F(A_{x_i},B_{y_i})$的值.太阳们非…
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2342 思路:先跑一遍Manacher求出p[i]为每个位置为中心的回文半径,因为双倍回文串的长度一定是4的倍数,即偶数,那么对于Manacher的回文中心一定是'#'字符.所以我们枚举每个'#',对于每个'#'当回文半径大于等于4才有可能成为双倍回文.如果当前位置的i是'#'且满足以上条件.那么我们就找到i右边的j.因为双倍回文的长度是4的倍数,那么i右边的j的回文长度一定是2的倍数,即…
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2565 题意:中文题 思路:定义L[i],R[i].表示以i为左端点/右端点时,最长回文串长度.那么答案就是L[i]+R[i]的最大值.问题转化为怎么求L[i],R[i].我们通过用Manacher可以求出以i为中心的最长回文串半径.然后再通过暴力+剪枝的方法对于每一个i和对应的最长半径求更新L[i],R[i]. #include<iostream> #include<cstdio…
题目链接[https://www.oj.swust.edu.cn/problem/show/2610] 题意:给你一个字符串,让你判断这个字符串是不是回文串,字符串的长度是1<len<1e7,内存是4096KB. 题解:首先这1e7个字符是存不下的,1e71024=9765KB>4096kB.那么怎么办?字符串哈希,先对字符串的前半部分进行哈希,然后在对字符串后半部分进行哈希,如果两部分的哈希值相同,那么这个字符串就是回文串. BKDRH哈希,哈希公式为has=has*seed+s[i]…