2024.2.19 在愿望的最后一个季节 记起我曾身藏利刃

今天模拟赛,顺利过了 T1 然后发现 T2 是答辩题,T3 写了送的。
出分发现 T2 挂了,看起来是被 T2 卡哈希了,魔怔。
下午讲的题都挺好的,晚上看了 RMR,小蜜蜂乱杀,雪碧乱杀,就连 C9 都乱杀了,这才是我想象中的一线强队暴打二线队啊,不要学 Faze 和 NAVI。

子序列

这个做法比较神秘。
考虑试填,发现关键在于单个子序列会被算多次,考虑维护一下,令 \(f_i\) 表示每个字母前缀可以凑出的当前子序列个数,于是对于接下来填的字母,只需要扫一遍求出各自的个数就可以了,对于维护这个东西,发现每个字符对应一个后缀加,于是树状数组维护一下即可。
枚举字符可以使用后缀主席树查询第 \(k\) 大实现,时间复杂度 \(O(n\log n)\)
https://marsoj.cn/record/65d301e2486aa004f124d732

斐波那契

对于询问,先找出大于 \(|T|\) 的两个串 \(A,B\),则子串只会有五种贡献:单独在 \(A\),单独在 \(B\),跨过 \(A,B\),跨过 \(B,A\),跨过 \(B,B\)
分别使用哈希求贡献,矩阵快速幂求系数,即可做到 \(O(M+\log n)\),细节较多。
https://marsoj.cn/record/65d35a4d93e87304eede7275

串串

\(dep\) 可以认为是对应前缀的 border 数量。
考虑维护相等的字符串,建立 SAM,发现随着 \(r\) 向右移,会加入所有前缀的后缀,使他们对应的串贡献加一,同时原本的贡献也会被多算一次。
于是可以转化为 parent 树上链加链求和,使用树剖做到 \(O(n\log n)\)
https://marsoj.cn/record/65d367f693e87304eede75bf

posted @ 2024-02-19 23:06  cnyz  阅读(17)  评论(0编辑  收藏  举报