传送门 跟这道题是一模一样的. 于是本蒟蒻又写了一遍10min1A庆祝 代码: #include<bits/stdc++.h> #define ri register int using namespace std; const int N=2e5+5; typedef long long ll; int T,k; string s[N]; struct SAM{ int last,tot,len[N],son[N][26],link[N],val[N]; vector<int>e…
传送门 调代码调的我怀疑人生. 启发式合并用迭代写怎么都跑不过(雾 换成了dfsdfsdfs版本的终于过了233. 题意简述:求给出nnn个字串,对于每个给定的字串求出其有多少个字串在至少kkk个剩下字串中出现过. 显然先对所有字串建一个samsamsam出来,然后对于每个状态用一个setsetset维护在哪些字串里面出现过(这个显然需要在建完parentparentparent树之后启发式合并一波),最后拿每个串在上面匹配,如果当前的状态不满足题意就沿着树边向上跳即可. 代码: #includ…
题面 传送门 题解 为什么成天有人想搞些大新闻 这里写的是\(yyb\)巨巨说的启发式合并的做法(虽然\(LCT\)的做法不知道比它快到哪里去了--) 建出\(SAM\),那么两个前缀的最长公共后缀就是它们在\(parent\)树上的\(LCA\)的深度 对于每一个子串来说,所有和它相同的串里只有它的前驱和它的后继是有贡献的.这个只要考虑任何一个包含了这个子串和另外一个和它相同的子串的询问,这个询问必定包含它的前驱或后继 那么我们用\(set\)启发式合并来维护\(endpos\)集合,每一次只…
一个串建后缀自动机, 其他串在上面跑, 然后用当前串跑的去更新全部 --------------------------------------------------------------------------- #include<cstdio> #include<cstring> #include<algorithm>   using namespace std;   const int maxn = 10009; const int n = 26;   cha…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2946 对每个串都建一个后缀自动机,然后 dfs 其中一个自动机,记录同步的话在别的自动机上走到哪些点了:只要有一个自动机上走不下去了,就都走不下去了.每走到一个新地方就更新一下 ans . 或者像网上的其他题解一样,对一个串建一个后缀自动机,其他串跑一遍并在 parent 树上更新了之后得知自动机的每个点在当前串上能匹配的长度,最后对自动机上每个点的答案取 max .不过没写这个. #in…
[Poi2000]公共串 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 1386  Solved: 620[Submit][Status][Discuss] Description          给出几个由小写字母构成的单词,求它们最长的公共子串的长度. 任务: l        读入单词 l        计算最长公共子串的长度 l        输出结果   Input   文件的第一行是整数 n,1<=n<=5,表示单词的数量.接下来n…
任意选择一个串作为模式串,构建出后缀自动机. 然后用其他的串在后缀自动机上跑匹配. 然后就到了理解后缀自动机性质的时候. 在某一个节点的最大值是可以沿着parent树上传的. 然后用dp[i][j]表示字符串i在位置j上的匹配的最长长度. 然后上传即可.之后在每一个节点统计所有串的min,然后再取max即可. 写法很暴力,貌似已经接近n^2了,但是还是A掉了. #include <cstdio> #include <cstring> #include <iostream>…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2946 建出 n-1 个后缀自动机一起跑呗. 代码如下: #include<cstdio> #include<cstring> #include<algorithm> using namespace std; ; ],cnt[],fa[][xn<<],l[][xn<<],go[][xn<<][],nw[];//<<1!…
题意 \(n\) 张卡牌 \(m\) 种颜色,询问有多少种本质不同的序列满足相邻颜色相同的位置数量等于 \(k\). 分析 首先本质不同不好直接处理,可以将同种颜色的卡牌看作是不相同的,求出答案后除以 \(\prod {a_i!}\) 即可. 如果我们能够得到一个至少存在 \(k\) 个魔术对的排列数,就可以容斥了. 考虑单独处理每种颜色, 枚举一个颜色 \(i\),计算这种颜色至少有 \(j\) 对的方案总数. 可以选择 \(j\) 张牌保证这些牌一定跟在某张牌的后面,这样就可以形成 \(\g…
传送门 samsamsam基础题. 题意简述:给出一个串,询问第kkk大的本质不同的串. 然而这就是弦论的简化版. 我们把samsamsam建出来然后贪心选择就行了. 代码: #include<bits/stdc++.h> #define ri register int using namespace std; const int N=2e5+5; int n,q,K; char s[N]; struct SAM{ int last,tot,len[N],link[N],son[N][26],…