随笔分类 - 题解
摘要:第 300300300 篇题解当然要写个有意思的题。 lxl 给出的标答是根号分治,不过也有序列分块的做法,只不过非常需要卡常。 我们先对序列分块。接着我们考虑怎么处理询问。 显然询问的结果有两种: 在块内的答案。这种可以通过预处理 disi,j,kdis_{i,j,k}disi,j,k 表示第
阅读全文
摘要:什么板子能评 230023002300。 建完 SAM,对于每一个点,其表示字符串个数为 lenu−lenfaulen_u - len_{fa_u}lenu−lenfau,出现次数可以通过 link\operatorname{link}link 边,即后缀链接线性求出,也是套路了。 然后算贡
阅读全文
摘要:SP1693 COCONUTS - Coconuts 算法:网络流,最小割。 难度:提高+/省选-。 考虑对于所有 111 的从 SSS 连边,所有 000 的往 TTT 连边。朋友之间连一条无向边。删掉朋友之间的一条边相当于看法不一致的一对朋友,删掉每个点和其所连的源点或汇点,相当于与自己想法不一
阅读全文
摘要:容易发现 LLL 是可以二分的。 接着考虑二分如何 check。 比较容易思考的思路是 DP,设 fif_ifi 表示前 iii 个字符的熟悉子串最长的长度之和。设当前二分的是 LLL,那么 fi=max{fi−1,maxj∈[i−maxleni,i−L]fj+(i−j)}f_i = \max
阅读全文
摘要:显然可以直接差分。 但是我看题的时候看成了多次查询。 所以我就写了个线段树。 注意到一个油漆桶被多次覆盖一个颜色是没有贡献的,所以考虑线段树的每个节点维护 c[0/1][0/1][0/1] 分别表示 333 种原色是否出现的方案数。 接着维护一个 tag,可以使用 unordered_set 等结构
阅读全文
摘要:SAM 经典题。 考虑建出 SAM,第 kkk 小的子串其实就是自动机上从起点开始字典序第 kkk 小的路径上的字符串。 因此可以考虑设 fif_ifi 表示从 iii 出发的不同路径个数,那么 fu=1+∑(u,v)∈SAMfvf_u = 1 +\sum \limits_{(u,v) \in \
阅读全文
摘要:考虑先建出后缀自动机。 后缀自动机一个常用性质:每个状态表示所有字符串的 Endpos\operatorname{Endpos}Endpos 集合完全相等,也就是出现次数完全相等。另外一个结论,每个状态表示的所有字符串,一定是其字符串中最短和最长字符串之间。即对于构建自动机的 lenilen_il
阅读全文
摘要:可以发现,如果固定 lll,那么 gcd(al,al+1,⋯ ,ar)\gcd(a_l, a_{l+1}, \cdots, a_r)gcd(al,al+1,⋯,ar) 显然单调递减。 接着可以发现,lll 固定时,随着 rrr 的增大,gcd\gcdgcd 的不同个数并不多。 可以这样理解
阅读全文
摘要:考虑二分 LCP,显然 LCP 是有单调性的。 然后维护一下哈希,用 multiset 判断存在性,就可以做到两只 log\loglog。 ABC 还卡了 109+710^9+7109+7 的单模哈希,所以赛时用了双模。 #include <iostream> #include <cstring>
阅读全文
摘要:先考虑什么时候输出 −1-1−1。 我们令 dis1,udis_{1,u}dis1,u 表示树 aaa 中从 xxx 点走到 uuu 经过的边数,同理 dis2,udis_{2,u}dis2,u 表示树 bbb 中从 yyy 点到 uuu 经过边数。 我们对于一个点 ppp,当且仅当 dis1,
阅读全文
摘要:如果我们可以知道对任意 i,ji,ji,j,pip_ipi 和 pjp_jpj 的大小关系,那么我们可以用基于比较的排序算法,在 O(nlogn)O(n \log n)O(nlogn) 的时间复杂度求出 ppp 序列。 考虑怎么求出 pip_ipi 和 pjp_jpj 大小关系,若 pi<
阅读全文
摘要:考虑对 aaa 序列从小到大排序。 可以发现,一定存在一种最优方案,使得选出的数在 aaa 排序后的序列中是一段连续区间,且极差最小。因为如果存在一种最优方案选取的不是连续区间,那么将这些数最左端和最右端内全部选取,仍然符合题意,极差不变,但是选择的数是连续区间。 因此将 aaa 排序后,考虑双指针
阅读全文
摘要:题意:有 nnn 天,每天有上午,中午,下午,每一个时间段可以吃三种食物中的一种,但相邻时间段不能相同并且早上只能吃两种之一。给定 nnn,求合法吃食物方案总数。 考虑 nnn 天,每个时间段独立,所以有 3n3n3n 个时间段,第 1,4,7,⋯1,4,7,\cdots1,4,7,⋯ 的时间段只能
阅读全文
摘要:考虑什么样的区间可能满足要求。 满足要求的区间即一个是 SSS 按照升序排序后的子串,那么显然这个子串也升序排序。 所以我们可以发现第一个要求是:区间 Sl,Sl+1,⋯ ,SrS_l, S_{l+1}, \cdots, S_rSl,Sl+1,⋯,Sr 升序排序。 但是区间就算升序排序,也不一
阅读全文
摘要:套路最短路。 考虑两数 a,ba,ba,b,若 gcd(a,b)≠1\gcd(a,b) \neq 1gcd(a,b)=1,那么 a,ba,ba,b 一定有公共质因数。 于是可以考虑对于每一个点 iii,向 aia_iai 的所有质因数连边,然后广搜即可。 // LUOGU_RID: 99311
阅读全文
摘要:比较容易的一道 Ynoi。 可以发现,很多点的答案就是整棵树取两点异或的最大值。或者说,设整棵树异或最大的两点为 u,vu,vu,v,那么对于所有 iii,以 iii 为根的子树不包含 uuu 且不包含 vvv,那么 ansi=au⊕avans_i = a_u \oplus a_vansi=au
阅读全文
摘要:由于边权为 111,直接广搜并且 O(n2)O(n^2)O(n2) 枚举两点后取最大值即可通过本题。并不需要用到最短路等其他做法。注意多测清空。复杂度比最短路算法更优,无需注意什么其他问题。 #include <iostream> #include <cstdio> #include <vector
阅读全文
摘要:考虑字典树上深搜。 由于字符集只有 abc\texttt{abc}abc,所以深搜是可过的。 建立完字典树后,从根开始,维护现在是否有存在一个不同的字符,如果有,那么下一个字符肯定和询问的串相同,如果没有不同,那么下一个可以选择相同也可以选择不同的。 #include <iostream> #inc
阅读全文
摘要:可以发现,牛如果想要去其他地点的雨棚,那么一定走最短路。 所以可以先 O(n3)O(n^3)O(n3) 处理最短路,然后二分答案,将所有最短路 ≤\leq≤ 当前二分的时间的边加入。 然后网络流判断可行性,即超级源点向每一块田地连一条容量为牛的个数的边,然后把田地和雨棚拆点,雨棚向超级汇点连容量为雨
阅读全文
摘要:本来以为出了个板子,但好像没有被喷太惨。 题目出来后,出题人其实给了一个三次方的做法,而枚举天数暴力算也是三次方的。 而在公开赛几天前,这玩意被加强了,原因是出题人突然发现可以拓扑排序。 然后暴力被卡成 909090 分。但是我们可以考虑 bitset 优化。显然每天肯定能把现在能做的全部做完,然后
阅读全文

浙公网安备 33010602011771号