![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
字符串
mayaohua2003
这个作者很懒,什么都没留下…
展开
-
Codeforces gym 100269 C
考虑直接枚举所有不同的串AAA(显然是初始串的子串)。若我们预处理出任意两个后缀的LCP,对于一个固定的串AAA,我们容易在O(count(A))\mathcal O(count(A))O(count(A))的时间复杂度内判定是否有合法方案。注意到∑Acount(A)=O(n2)\sum_{A}count(A)=\mathcal O(n^2)∑Acount(A)=O(n2),于是我们暴力枚举即可。时间复杂度为O(len2)\mathcal O(len^2)O(len2)。#include <b原创 2020-12-21 22:05:05 · 261 阅读 · 1 评论 -
UOJ 494
这是myy出的神仙题,我花了很多天时间才看懂题解。这份题解参考myy的官方题解和yhx的题解,大概算是后者的详细证明版本。我们接下来的定义都是在一个特殊的字典序意义下的,也就是一个串的前缀大于自身(也可以理解为给每个有限长字符串最后加一个U\tt{U}U,然后在通常字典序意义下比较)。另外我们定义两个字符串的严格<<<与严格>>>,字符串sss严格<t<t<t意味着存在位置i>0i>0i>0,使s[1…i−1]=t[1…i−1]s[1原创 2020-11-27 13:16:04 · 503 阅读 · 0 评论 -
Codeforces Round 1286 简要题解
A. Garland略B. Numbers on Tree略C2. Madhouse (Hard version)略D. LCC注意到如果存在相遇点对,第一次相遇的一定是相邻的点。那么考虑枚举所有的相邻点对和它们的初始方向,可以得到O(n)\mathcal O(n)O(n)组可能的第一次相遇时间。给它们排序后,只要对每一组算出恰好是该时间相遇的概率即可,差分一下变为给定O(n)\mathcal O(n)O(n)个时刻tit_iti,算出前tit_iti时刻都没有相遇的概率。对于一个固定原创 2020-06-14 20:49:15 · 381 阅读 · 0 评论 -
Codeforces 504E
对原树做轻重链剖分,那么每条路径可以变为O(logn)\mathcal O(\log n)O(logn)段dfs序上区间的连接。那么对于dfs序维护正反串的hash值,就容易判断两个区间对应子串是否相等。注意到我们可以用two pointer跳过完全相等的整段,在最后一段二分LCP长度即可。时间复杂度O(n+mlogn)\mathcal O(n+m\log n)O(n+mlogn)。#i...原创 2019-12-06 19:32:41 · 186 阅读 · 0 评论 -
Codeforces 666E
感觉古老场次的字符串题一般都比较简单?大概先把sss和tit_iti一起建一个广义SAM,在上面做一个下标为编号的线段树合并预处理出每个节点子树内的信息。每次查询的时候需要先将[pl,pr][p_l,p_r][pl,pr]定位到广义SAM上的节点,这个用一个倍增做就好了。时间复杂度O((∣s∣+∑i=1m)⋅(26+logm)+qlogm)\mathcal O((|s|+\sum_...原创 2019-12-01 15:48:26 · 281 阅读 · 0 评论 -
Codeforces 547E
不明白这个题为啥会是div1E。。。套路的,给所有串建个AC自动机,插入的时候给路径打标记,这样统计一个串在[l,r][l,r][l,r]中出现了多少次就等价于统计在这个点fail树的子树中有多少个[l,r][l,r][l,r]间的标记,直接将询问离线后扫描线,对dfs序用树状数组维护即可。时间复杂度O((∑i=1n∣si∣+q)logn)\mathcal O((\sum_{i=1}^{n}...原创 2019-11-10 22:58:53 · 234 阅读 · 0 评论