首页 > TAG信息列表 > AHOI2013
洛谷 P4248 [AHOI2013]差异 & P3181 [HAOI2016]找相同字符
链接 P4248 P3181 把这两道题放在一起是要讨论这样一个问题 对于一个已知 \(ht\) 的 \(S\),\(O(n)\) 求 \(\sum\limits_{1\le i<j\le n} lcp(i,j)\) 首先我们可以把上式写成 \(\sum\limits_{1\le i\le j}\sum\limits_{1\le j<i}lcp(i,j)\),也就是对于排序后的后缀的一个位置,我们只P4248 [AHOI2013]差异(后缀树)
P4248 [AHOI2013]差异 给出一个长度为\(n\)的字符串\(S\),令\(T_i\)表示它从第\(i\)个字符开始的后缀,求: \(\sum_{1\leq i<j\leq n}len(T_i)+len(T_j)-2\times lcp(T_i,T_j)\) 做法: 对反串建后缀树。 后缀树的边权记为\(len[i]-len[link[i]]\)。 求后缀树上所有路径长度和,就是答案。P4396 [AHOI2013]作业
题目 题目 思路 看见这种多测+无修改+不强制在线的就可以莫队。 然后这里询问的东西和数值有关,所以是值域分块 所以这破题是莫队套分块? 莫队就是大家耳熟能详的莫队,分块就是大家耳熟能详的分块…… 莫队是没什么好说的,就老老实实搞 值域分块的时候也是老老实实搞 就是要存3个Luogu P4248 [AHOI2013]差异
题链 可以把\(\sum\)拆开,只需要计算\(\sum_{i<j}LCP(suf[i],suf[j])\) 这显然是后缀数组裸题,所以我们采用后缀自动机来解决 后缀的前缀很难看,不妨翻转字符串,求前缀的后缀,应用parent tree 发现任意两个节点\(i,j\)的最长后缀为Len(LCA(i,j)),对每个节点求出子树中的点对,用DP统计 #i「AHOI2013」 差异
知识点: SA,线段树,单调栈 原题面 Loj Luogu 题意简述 给定一长度为 \(n\) 的字符串 \(S\),令 \(T_i\) 表示从第 \(i\) 个字符开始的子串,求: \[\sum_{1\le i<j\le n}\{\operatorname{len}(T_i) +\operatorname{len}(T_j) - 2\times \operatorname{lcp} (T_i,T_j)\} \]\(\operatornam【AHOI2013】差异(2)
题面 https://www.luogu.org/problem/P4248 题解 这里,提供后缀数组的做法。 #include<cstdio>#include<cstring>#include<algorithm>#include<iostream>const int N=1000050;using namespace std;char s[N];int n,m,rank[N],sa[N],tax[N],tp[N],height[N];struct rm线段树分治初步学习&洛谷P5227[AHOI2013]连通图
线段树分治 其实思想说起来是比较简单的,我们把这个题里的所有操作(比如连边删边查询balabala)全部拍到一棵线段树上,然后对着整棵树dfs一下求解答案,顺便把操作做一下,回溯的时候撤销一下即可。虽然有的操作需要以区间形式拍到树上,导致它可能会被拆成两个,但线段树的形态同样保证了操作最[AHOI2013]作业
传送门 Description 给定了一个长度为\(n\)的数列和若干个询问,每个询问是关于数列的区间表示数列的第\(l\)个数到第\(r\)个数),首先你要统计该区间内大于等于\(a\),小于等于\(b\)的数的个数,其次是所有大于等于\(a\),小于等于\(b\)的,且在该区间中出现过的数值的个数。 \(n,m \leqBZOJ 3238: [Ahoi2013]差异(后缀自动机构建后缀树)
题目 这个式子一看好眼熟。 就是求后缀树上所有后缀所在点的距离之和。 后缀树有一个(自认为)很恶心优秀的O(n)O(n)O(n) 后缀自动机求出来的后缀链接其实是前缀树。。。。。。 把字符串反过来就能建树了。 O(n∗26)O(n*26)O(n∗26)//262626是复制前向边的复杂度。 AC Code: #inc