[BZOJ1396&2865]识别子串】的更多相关文章

Input 一行,一个由小写字母组成的字符串S,长度不超过10^5 Output L行,每行一个整数,第i行的数据表示关于S的第i个元素的最短识别子串有多长. Sample Input agoodcookcooksgoodfood Sample Output 1 2 3 3 2 2 3 3 2 2 3 3 2 1 2 3 3 2 1 2 3 4   出现只有一次的是parent数上的叶子节点,endpos=1 所以只需要找endpos=1的节点minlen-maxlen之间对于一段的贡献放向去思…
bzoj1396 bzoj2865 dbzoj1396 dbzoj2865 题面 XX在进行字符串研究的时候,遇到了一个十分棘手的问题. 在这个问题中,给定一个字符串\(S\),与一个整数\(K\),定义\(S\)的子串\(T=S(i,j)\)是关于第\(K\)位的识别子串,满足以下两个条件: 1.\(i≤K≤j\). 2.子串\(T\)只在\(S\)中出现过一次. 例如,\(S=banana\),\(K=5\),则关于第K位的识别子串有\(nana\),\(anan\),\(anana\),\…
题目 输入格式 一行,一个由小写字母组成的字符串S,长度不超过10^5 输出格式 L行,每行一个整数,第i行的数据表示关于S的第i个元素的最短识别子串有多长. 输入样例 agoodcookcooksgoodfood 输出样例 1 2 3 3 2 2 3 3 2 2 3 3 2 1 2 3 3 2 1 2 3 4 题解 BZOJ AC200纪念,, 这两题题干是一样的,但唯一不同的是..后者卡空间[MLE得飞起] 先说解法: 我们知道后缀自动机上的parent树的每个节点子树中叶子的数量就是该节点…
[BZOJ1396]识别子串&[BZOJ2865]字符串识别(后缀自动机) 题面 自从有了DBZOJ 终于有地方交权限题了 题解 很明显,只出现了一次的串 在\(SAM\)的\(right/endpos\)集合大小一定为\(1\) 换句话说,在\(parent\)树上是叶子节点 找到所有这样的节点, 假设它的\(len=r\),它父亲的\(len=p\),它的结束位置为显然就是\(r\) 令\(l=r-p\) 以\(r\)结尾, 并且只出现了一次的串的左端点 为\(1..l\),那么,他们的答案…
http://www.lydsy.com/JudgeOnline/problem.php?id=1396 (题目链接) 题意 问字符串S每一位的最短识别子串是多长(识别子串指包含这个字符且只出现在S中一次的子串). Solution 很简单,搞出后缀数组以后,对于每一个后缀i,都可以求出从i向后延伸的最短识别子串,也就是${max(height[rank[i]],height[rank[i]+1])+1}$,注意一种情况,就是i与排在它相邻位置的后缀的lcp就等于它自己的长度,这种情况i是没有向…
Description 在这个问题中,给定一个字符串S,与一个整数K,定义S的子串T=S(i, j)是关于第K位的识别子串,满足以下两个条件: 1.i≤K≤j. 2.子串T只在S中出现过一次. 例如,S="banana",K=5,则关于第K位的识别子串有"nana","anan","anana","nan","banan"和"banana". 现在,给定S,求对于S的…
这个不是题解,看不懂的,别看了 明明应该是会的,怎么还是写了6个小时呢... 把后缀数组.height数组.排名数组求出来,那么对于原串s的任意子串[x,y](表示第x个到第y个字符组成的子串,字符从1开始编号),就有了O(1)判断其在原串中出现次数是否大于1的方法 bool more1(int x,int y) { ?height[rk[x]]:-,t2=rk[x]<n?height[rk[x]+]:-; ||t2>=y-x+; } 就是找到x在后缀数组中的排名rk[x],再找到后缀sa[r…
题意: Description Input 一行,一个由小写字母组成的字符串S,长度不超过10^5 Output L行,每行一个整数,第i行的数据表示关于S的第i个元素的最短识别子串有多长. 题解: 先建出SAM,显然right集合大小为1的子串,即在parent树上的叶子节点可以作为识别子串: 考虑一个这样的子串会对哪些区间产生影响: 设$l=max[fa[s]]$,$r=max[s]$,显然这个子串出现的位置就是$r$,所以对区间$[1,r]$都有影响: 但是其中有一段是被$fa[s]$包含…
水水的字符串题 ~ #include <map> #include <cstdio> #include <cstring> #include <algorithm> #define M 500003 #define N 1000003 #define lson now<<1 #define rson now<<1|1 #define inf 1000000000 #define setIO(s) freopen(s".in&…
题意: 一行,一个由小写字母组成的字符串S,长度不超过10^5 思路:论文题 设p为自动机上的合法结点,r为右端点,len=st[fa[p]]]+1 位置[r-st[p]+1,r-len+1]与r-i+1取min,其中i为下标 位置[r-len+1,r]与len取min 建立两棵线段树,分别维护r+1和len 因为只有区间修改和单点查询可以不写lazytag #include<bits/stdc++.h> using namespace std; typedef long long ll; t…