2025 贵阳 代码源 Day 6

# Day 6

## [A	Codeforces 176B	Word Cut](https://codeforces.com/problemset/problem/176/B)

把题目的拆分操作理解成循环重构就好做了,发现可以 dp,$f_{i,j}$ 表示序列循环重构 $i$ 次后的样子,用了 $j$ 步,发现所有的 $f_{i},i:=1\to n-1$ 都相等,只有 $f_0$ 不等,所以再优化 $f_{0/1,j}$ dp就好。

## [B	洛谷 P4824	Censoring S]()

用栈,栈中的元素表示还剩下的元素,只在栈上跑 kmp 就好,记录下每个 $i$ 对应的 $j$,当在栈上发现有匹配之后就弹出栈顶的 $|T|$ 个元素然后接着新的栈顶继续跑 kmp.

## [C	CodeForces 1721E	Prefix Function Queries](https://codeforces.com/problemset/problem/1721/E)

发现正常 kmp 只是均摊 $O(1)$,如果多次重复还是会炸,于是使用 kmp 自动机,也就是我们将普通 kmp 的 $fail_i$ 数组改成 $nxt_{i,w}$,表示 $i$ 的下一个字符是 $w$ 时的 $nxt$,这样单次复杂度 $O(w)$,对每个 $t$ 单独做即可。

## [D	CodeForces 898F	Restoring the Expression]()

发现枚举了任意一个断点后剩下的一个断点只有 $4$ 种可能,这样 $O(n)$ 枚举每一种可能区间然后用字符串哈希做就好。

因为要求在十进制下加和,所以用 $10$ 做哈希的底数,双带模就能防止哈希冲突。

## [E	洛谷 P8131	Gene Folding](https://www.luogu.com.cn/problem/P8131)

看到回文想到 manacher,发现合并只会从左一直连续合并到某个点同时从右一直连续合并到某个点,可以发现两者互不干扰,便分别统计出左端点可能的位置和右端点可能的位置,枚举其中一个对另一个二分即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值