PAM
Deep_Kevin
我太弱了
展开
-
SAM,ACAM,PAM 辨析
正题 SAM,Suffix AutoMaton,后缀自动机,可以识别每一个后缀,拥有多个结束点,实际上可以识别所有的子串,所以我更愿意将它理解为子串自动机 ACAM,Aho-Corasick AutoMaton,AC自动机,可以识别所有串的前缀,所以我更愿意将它理解为它前缀自动机. PAM,Palindrome AutoMaton,回文自动机,可以识别该串的所有回文子串.同类型名称辨析 点 SAM上的一个点对应着一个等价类,这个等价类...原创 2020-09-09 20:39:31 · 920 阅读 · 0 评论 -
[JSOI2013]快乐的 JYY,洛谷P5685,广义SAM+PAM
正题 本质上与秩序魔咒毫无区别,就是换个方法来维护,原来只要看看是否都存在,现在要存 在两边出现的次数.#include<bits/stdc++.h>using namespace std;const int N=200010;char s[N],t[N];int n,m;long long ans=0;struct Suffix_AutoMaton{ int tot,las; int len[N],ch[N][26],sum[N],fa[N][20],a...原创 2020-09-09 19:45:12 · 169 阅读 · 0 评论 -
秩序魔咒,洛谷P5555,广义SAM+PAM
正题 虽然有一点难写,但是挺好想的. 大概就是用PAM求出所有本质不同的回文串,然后在SAM上看看对应点的right集合是否在两点都出现过,希望有大牛发明出广义PAM? #include<bits/stdc++.h>using namespace std;const int N=1200010;char s[N],t[N];int n,m,mmax,num;struct Suffix_AutoMaton{ int tot,las;...原创 2020-09-09 19:41:16 · 352 阅读 · 0 评论 -
[CERC2014]Virus synthesis,洛谷P4762,中等的PAM
正题 中等难度,大概想了10分钟就会做了 因为PAM可以管理所有本质不同的串,所以对于我们只需要考虑要多少步可以达到当前点的对应串,最后拿所有节点更新一下ans即可,具体更新就是n-len[x]+ans[x],ans[x]就是要多少步可以达到当前点的对应串. 因为翻转一下只能变成偶串,所以我们先考虑偶串: 对于一个偶串now的一个不超过长度/2后缀的后缀p,它对该串的贡献显然是,考虑先补齐一半再翻转一下.相当于取中最小的,当长度增加时,len的减少速率...原创 2020-09-09 19:37:42 · 155 阅读 · 0 评论 -
[SHOI2011]双倍回文,洛谷P4287,简单的PAM
正题 以i结尾出现新的本质不同的答案,当且仅当这个点对应PAM上的节点长度为4的倍数,且<=该节点长度的1/2的第一个fail祖先的长度恰好为该节点1/2.#include<bits/stdc++.h>using namespace std;const int N=500010;struct Palindrome_AutoMaton{ int n,tot,las; int ch[N][26],fail[N],len[N],num[N],ans[N]; c...原创 2020-09-09 19:21:54 · 164 阅读 · 0 评论 -
学习笔记第五十七节:回文自动机
正题 由于回文自动机的代码十分的有趣,以至于半天都没看懂怎么实现. 为了解决广大苦困人民的烦恼,我决定写一篇针对代码的讲解 首先回文自动机有两个根,一个是偶根,一个是奇根. 偶根的长度为0,奇根的长度为-1. 为什么要这样设置?讲完前面部分再说 首先长度表示的是当前点所对应的回文串长度,从偶根或奇根往下遍历时,在两边同时加上转移边对应的字符,这样会使回文串长度+2,当从奇根往下遍历的时候,可以发现第一步其实只将长度变为了1(...原创 2020-09-09 19:12:22 · 127 阅读 · 0 评论