做题记录(Apr.)
4.4
P8251
比较显然的是一个数在整个序列里能把前面的弹到哪里,在子串中也可以,要是子串不包含到那里那就肯定可以弹到头。单调栈预处理一下,离线 + 树状数组。
AT_abc452
D
DP,写成史了。
E
推式子,把 \(a\bmod b\) 换成 \(a-\lfloor\frac{a}{b}\rfloor\times b\)。
4.5
P10537
先根据各个观察员的记录分一下段,保证每一段所有观察员记录的叶子集合相同,然后遍历一下看看那些段必须和后面的并起来才合法。
4.11
AT_abc453
D
勾石广搜。
E
枚举人少的那队有多少人(假设是 A 队),求一下有多少人可以进 A,有多少人可以进 B,有多少人都可以进,组合数搞一下。
G
何意味主席树板。
4.13
P1442
可以用图论做,用珂朵莉树判断一下从某块板上往下会掉到哪块板上,连条边。然后跑跑最短路或拓扑,可以把一块板拆成左右两个点。
4.14
P2439
同 P1868。
P2375
先预处理一下 KMP 的 \(fail\) 数组以及 \(fail\) 树高度,然后再遍历一遍找 border,如果长度超了就跳一下。
update on \(2026.4.25\):在 \(fail\) 树上用双指针找当前节点和它的半长 border。
SP21360
跟上面类似,求一下 \(fail\) 树上 \(n\) 点的深度即可。
4.16
P12627
依旧从来不会证贪心。
每个点遍历完儿子后能放多少放多少,既看儿子的和也看兄弟的和。注意先看重量固定的儿子,这样可以确定后面的每个儿子最多放多少。
4.19
LGR-281-Div.3
A
略。
B
发现每次做操作肯定使二进制下的 \(n\) 减少一个至少一个 \(1\),\(\log\) 次 \(n\) 就不会变化了。
C
先判我的 \(b_i\) 够不够硬抗一下。
以 "我" 为根,进行类似点分治的操作,看看每个儿子所在连通块有无 \(a_i\) 大于等于我的,有直接加上这一块的大小。
D
非常好诈骗题,硬控半小时。(
\(p\le 20\),由于 \(26\) 是 \(2\) 的倍数,所以 \(26^{20}\) 是 \(2^{20}\) 的倍数,所以只需要保留结果的后二十位,也就是复制出二十位就可以停下来了。
注意二十六进制下值为 \(1\) 或 \(0\) 的串(AAA..AB 和 AAA..AA),这两种串长度永远不够,需特判。
E
性质:在 Trie 树上独占 lca 所在子树的两个点满足。
4.20
P3719
何意味。
4.21
P9087
首先只有两种字符有用,用于交替(非重音)和连续(重音)。
三种情况:
全交替,硬抗 \(n-k+1\) 次 \(b\)。
每出现连续 \(k-1\) 次交替,就连续一次,吃一个 \(a\)。
特别的,由于最后一次吃 \(a\) 后可能长度较短,可以通过不吃这个 \(a\),最后这段硬抗 \(b\) 降低代价。
如果前面的长度满的段硬抗也能降低代价的话,直接用第一种情况即可,所以只用考虑最后一段。
4.23
CF86D
复习莫队。
4.24
AT_abc242_g
依旧复习莫队。
AT_abc293_g
还是复习莫队。
4.25~4.28
- 一直再写分块,所以放一起。
CF558E
小时候看的题,当时觉得难写,现在回来补一下。
每一个字符开一颗线段树,然后排序时就把区间内每种字符的数量找出来,再区间推平一下。
数列分块入门系列
具体的见文章,写到哪道题文章更到哪儿。
P3426*
\(fail\) 树中非常经典的题。首先 KMP 建树,根据题目,答案只可能是根节点到 \(n\) 号节点这条链上的点(盖章要盖头尾,所以肯定是 border 或是整个串)。所以在这条链上枚举答案。
而且盖章时,考虑盖一个章的结尾处,以这个位置结尾的前缀的 border 集合中肯定有这个章。结合 \(fail\) 树的性质,能盖章的位置都在当前枚举到的章的子树内。
所以从根节点往下找(靠近根节点的更短),递归时把不在子树内的点全部扔掉,维护一下剩下的点在原串上相邻的最大距离,看能不能盖满即可。
P5829*
\(fail\) 树板子题,应用了 \(fail\) 树上两点 \(lca\) 即为两前缀的公共最长 border。特殊情况为两点有祖先关系,这个时候 \(lca\) 为其中短的串,不能算 border,还要向上跳一次。
P2801
同数论分块入门 2。
4.30
P9349
神秘。

浙公网安备 33010602011771号