8.28 A 星人是一种 OI 很强的生物
Mahjong
找到可以通过以下两种操作,使得长度为 、元素之和为 的数列 全为 的 的个数,再取模 。
- 在 中选一个元素,将其减去 。
- 在 中选取长度为 的子串,子串中每个元素减去 。
tag:组合数学
搞笑题,我忘了插板法,我更搞笑。
首先判无解。由于两种操作均可看作从总和中减去 ,所以若 就无解。
发现直接从 中删除比较麻烦,所以我们选择从 开始加,加出来的序列就是我们的 。
考虑如何不重不漏统计出 。发现唯一重复的情况是执行了 次 相同的二操作,这能被 次一操作替代。于是实际上我们要构造一组操作序列 , 中 代表下标为 的二操作执行了多少次, 中 表示下标为 的一操作执行了多少次。那么我们有如下限制:
- 。
- 对于所有 ,。
这相当于前 个板有上界限制的插板法。发现上界限制难做,但下界限制好做,无非是先从所有元素里划出一部分做下界然后转无限制插板法。所以我们容斥,钦定 个 不合法,枚举 中哪 个不合法,然后有:
由于 很大,但是 很小,于是我们暴力处理组合数即可。
Make Biconnected
给你一棵由无向边组成的二叉树,树上每个点有权值 。你可以把两个点之间连无向边,如果将 与 连边,代价是 。请给出一种连边方式,使得连边后,图中去掉任何一个点仍然联通,即图是一个点双连通图。在此基础上,你要使代价最小。
tag:构造
发现对于度数为 的每个点,必定有条路径以它为一个端点。否则它会产生割点。
因此,我们将所有度数为 的点配对,然后两两匹配即可。每个点匹配与他距离最长的那个点。
需要注意的是这样可能会多出一个点,我们把这个点向上跳,直到跳到第一个三度点。三度点到这个叶子节点的路径必须被覆盖,于是我们在树的剩余部分找到最小值连起来即可。
All Pair Shortest Paths
给你一个 的表格,定义 为 走到 经过格子权值和的最小值,求所有 之和。
tag:分治
之后的讨论中,不妨设 的横坐标小于 。
由于表格只有两行,因此我们的路径必定横坐标递增。因为如果走了回头路,就要再把之前走过的路再走一遍,而且没有收益。
这样的话,我们就把对 的讨论限制在了 这个区间里。于是可以考虑分治。对于分治中心 ,考虑左端点在 之间,右端点在 之间产生的贡献。对于左边,我们倒着做,考虑 和 到左边每个点的最短路径。对于右边,我们正着做,同样是从中央两个点开始考虑。
最后一个问题,我们如何合并左右两边的答案。答案有两种情况: 和 ,表示走到 上方的点汇合还是走到下方的点汇合。我们把右边的点按照 从小到大排序,显然如果 则走 更优。于是做一个二分后前缀和统计贡献即可。时间复杂度 。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异