SAM的经典应用 一个状态的SIze==1绝对不合法. 一个状态在parent树上有一个Size>1的后继绝对不合法(前面可以再补字符) 一个状态可以转移到Size>1的节点绝对不合法,因为可以在后面补字符. #include<cstdio> #include<cstring> #include<map> typedef long long ll; const int maxn = 2e5+20; int par[maxn],mx[maxn],tr[maxn…
题目链接https://www.luogu.org/problemnew/show/P2408 SAM裸题,大力求就行了 #include<cstdio> #include<cstring> typedef long long ll; const int maxn = 2e5+20; int par[maxn],mx[maxn],tr[maxn][26]; int cnt=1,last=1; void extend(int x) { int np = ++cnt,p=last; m…
首先,在A 串上建立一个SAM,然后用B串在上面跑.具体跑的方法是: 从根节点开始,建立一个指针 p ,指着B串的开头,同步移动指针,沿着SAM的边移动,如果可以移动(即存在边)那么万事皆好,直接len++就好,但是,如果无法继续转移(失配了),那么,我们考虑跳回其父节点,因为其父节点的Right集是当前状态的真超集,那么其父节点状态所代表的字符串的集合中的任意一个字符串,都是当前状态所代表的字符串集合中的正在匹配的字符串(会不会一定是最长串?)的后缀,所以,有一个贪心的思想:父节点状态中的最长…
Day0 今天早上三点半才睡着,五点起床,前往省城郑州.与省实验常老师汇合,坐上高铁,下午三点半多才到广州二中. 下午随便找了一个教室进去敲一敲代码,发现自己越来越菜了. 和一大堆网上的dalao面基了呢!开心! 晚上开幕式,节目很好看,讲话很 $\color {red} {风趣} $. Day1 早上的饭好评!可以说是非常好吃了d(`・∀・)b 有面包鸡蛋和牛奶喔 _(:3 」∠ )_ 上午选择了第二教室这个地方QAQ,没能去参加松松松的小黄鸭宣传仪式 Σ( ° △ °).讲了生成函数和他那一…
Day-1 本段更新于 2018年11月8日23:26:44 今天还在机房里面,无所事事吧.上午睡了一上午,出去理了一下发,花了20块钱 QAQ. 下午来到机房,复习了一下exgcd的东西. 发现自己网络流好久没写了,洛谷群里又在讨论网络流,稍微有点慌QAQ 以为自己什么都准备好了,临近NOIp才发现自己什么都没准备好.KMP也好久没摸了,惨惨啊. 爆零预定 然后晚上和大家交流了一下注意事项(其实没有注意事项)以及把模拟赛的坑填了一下. Day 0 本段更新于 2018年11月9日17:27:1…
题解 我们考虑将棋盘扩大一倍,这样相当于取膜.然后,我们只要对x,y,的位置分类讨论,做四次crt就行.具体细节看文文代码. #include<cstdio> #include<algorithm> typedef long long ll; const ll inf = 1000000000000LL; int a[10],m[10]; inline ll exgcd(ll a,ll b,ll &x,ll &y) { if(b==0) { x=1;y=0; ret…
前言 后缀自动机是一个强大的数据结构,能够解决很多字符串相关的(String-related)问题. 例如:他可以查询一个字符串在另一个字符串中出现的所有子串,以及查询一个字符串中本质不同的字符串的个数. 后缀自动机可以理解为一个字符串的所有子串的压缩图,对于一个长度为\(n\)的字符串,它只需要\(O(n)\)的空间,以及\(O(n)\)的时间进行在线搭建(如果我们把字符集视作常数).如果我们把字符集视作变量\(k\),那么他的空间复杂度和时间复杂度都可以做到\(O(nlogk)\).后缀自动…
Description 字符串是oi界常考的问题.现在给定你n个字符串,询问每个字符串有多少子串(不包括空串)是所有n个字符串中 至少k个字符串的子串(注意包括本身) Input 第一行两个整数n,k. 接下来n行每行一个字符串. n,k,l<=100000 Output 输出一行n个整数,第i个整数表示第i个字符串的答案. Sample Input 3 1 abc a ab Sample Output 6 1 3 题解 多个字符串,考虑建广义后缀自动机. 对于每个节点,记录它在每个字符串出现的…
字符集大小为1e9.............使用 map 吧 统计本质不同的子串个数是SAM的经典应用之一 本质不同的子串个数其实就是\(\sum max(x)-min(x)+1\) 所以我们新建结点 \(np\) 时统计它的答案即可 根据我们统计的式子,显然新建节点\(nq\)的时候,不会对答案造成影响. #include<cstdio> #include<cstring> #include<map> typedef long long ll; const int m…
. 二进制状态压缩动态规划 对于某些情况,如果题目中所给的限制数目比较小,我们可以尝试状态压缩动态规划.例如,题目中给出数据范围\(n<=20\),这个一般情况下是一个状压DP的提示. 状态压缩,顾名思义,要把每种状态压缩起来.一个经典的问题是洛谷P1171,也就是著名的货郎担问题,它是一个NPC难题,目前不存在多项式算法.当题目中\(n\)的范围比较小时,我们可以考虑使用状态压缩动态规划(状压DP)来解决.(注:本文出现的"状压DP"若无特殊说明,均指状态压缩动态规划) 我们用…