
回文树【Palindromic Tree】
poursoul
这个作者很懒,什么都没留下…
展开
-
【codeforces】2014 Asia Xian Regional Contest G The Problem to Slow Down You 【Palindromic Tree】
传送门:【codeforces】2014 Asia Xian Regional Contest G The Problem to Slow Down You 【Palindromic Tree】题目分析:我们对两个字符串分别建立回文树,然后分别从节点0和1开始dfs,如果两个串都可以往某一个走,则ans+=两个串该节点下cnt的乘积,然后沿着这个方向继续dfs。代码如下:原创 2014-12-23 16:27:32 · 1466 阅读 · 0 评论 -
【Tsinsen】A1255. 拉拉队排练 【Palindromic Tree】
传送门:【Tsinsen】A1255. 拉拉队排练题目分析:这题呢,首先按照字符读入顺序插入构造回文树,然后处理出每种长度的本质不同的回文串的个数,然后降序排序,之后就是模拟随便搞搞了。代码如下:#include #include #include using namespace std ;typedef long long LL ;#define原创 2014-12-23 17:06:50 · 1446 阅读 · 0 评论 -
【ural】1960. Palindromes and Super Abilities【Palindromic Tree】
传送门:【ural】1960. Palindromes and Super Abilities题目分析:这题就是裸回文树了,按照读入顺序边插入边输出答案即可。。答案就是插入当前字符后回文树内表示回文串的节点个数。代码如下:#include #include #include using namespace std ;typedef long long原创 2014-12-23 17:14:46 · 1129 阅读 · 0 评论 -
【Tsinsen】A1393. Palisection 【Palindromic Tree】
传送门:【Tsinsen】A1393. Palisection题目分析:首先串S倒着插入构造回文树,处理出以每个下标为结尾的回文串个数cnt2[now] = cnt2[fail[now]]+1,然后处理出后缀和,suffix[i]表示开头下标大于等于下标i的回文串个数。然后我们再正着插入字符构造回文树,每次插入结束后,ans+=cnt2[i]*suffix[i+1]。当正着插入原创 2014-12-23 16:35:53 · 1454 阅读 · 2 评论 -
【codeforces】2014-2015ACM-ICPC CERC 14 Problem G: Virus synthesis 【Palindromic Tree+DP】
传送门:【codeforces】2014-2015ACM-ICPC CERC 14 Problem G: Virus synthesis题目分析:首先我们构造回文树,然后我们只考虑长度为偶数的回文串,长度为奇数的回文串总可以通过长度为偶数的回文串然后加上剩下的所需字符构成(当然这个偶数回文串的长度可以是0,此时这个奇数回文串的构造次数就是其长度)。对于一个偶数长度回文串u,假设其构造次原创 2014-12-24 22:01:08 · 2131 阅读 · 0 评论 -
【HDU】5157 Harry and magic string 【Palindromic Tree】
传送门:【HDU】5157 Harry and magic string题目分析:回文树裸题。令n为字符串长度,字符串下标从0开始。从字符串最后一个字符开始插入回文树构造回文树,记录以下标i~n-1为起点的回文串的个数的sum[i]。然后再正着构造一次回文树,边构造边累加答案,设x为以下标i的字符为结尾的回文串个数,则ans+=x*sum[i+1]。最后输出ans即可。PS:如原创 2015-01-03 22:11:49 · 1452 阅读 · 0 评论 -
【HDU】5421 Victor and String【回文树扩展——可左右添加字符的回文树】
传送门:【HDU】5421 Victor and String能维护左右最长回文的前提是要知道除了上一个节点表示的最长回文串能更新出新的本质不同的回文串外,其他节点都做不到(比赛的时候就是这个性质没想清楚,然后想了个O(N2)O(N^2)的做法……),这个可以YY一下,想清楚了就简单了,分别维护左右last指针,然后用一棵回文树实现这个过程,具体过程我就不多说了。my code:my~~code:原创 2015-08-22 22:38:10 · 2060 阅读 · 0 评论 -
【Tsinsen】A1280. 最长双回文串 【Palindromic Tree】
传送门:【Tsinsen】A1280. 最长双回文串题目分析:首先我们按照输入顺序插入字符构造回文树,构造好后我们就得到了以每个下标i结尾最长回文串长度lens,这时如果i-lens[i]>=0,那么我们将以i结尾的最长回文串长度+加上以i-lens[i]结尾的最长回文串长度作为此时得到的双回文串长度tmp,然后更新ans,ans=max(ans,tmp)。为什么此时我们更新可以呢?因原创 2014-12-23 16:52:45 · 1319 阅读 · 2 评论 -
Palindromic Tree——回文树【处理一类回文串问题的强力工具】
今天我们来学习一个神奇的数据结构:Palindromic Tree。中译过来就是——回文树。那么这个回文树有何功能?假设我们有一个串S,S下标从0开始,则回文树能做到如下几点:1.求串S前缀0~i内本质不同回文串的个数(两个串长度不同或者长度相同且至少有一个字符不同便是本质不同)2.求串S内每一个本质不同回文串出现的次数3.求串S内回文串的个数(其实就是1和2结合起来)原创 2014-12-23 16:14:22 · 26748 阅读 · 28 评论