8.28 A 星人是一种 OI 很强的生物

Mahjong

找到可以通过以下两种操作,使得长度为 N、元素之和为 M 的数列 A 全为 0A 的个数,再取模 998244353

  1. A 中选一个元素,将其减去 K
  2. A 中选取长度为 K 的子串,子串中每个元素减去 1

tag:组合数学

搞笑题,我忘了插板法,我更搞笑。

首先判无解。由于两种操作均可看作从总和中减去 k,所以若 MmodK0 就无解。

发现直接从 A 中删除比较麻烦,所以我们选择从 B={0,0,,0} 开始加,加出来的序列就是我们的 A

考虑如何不重不漏统计出 A。发现唯一重复的情况是执行了 ki 相同的二操作,这能被 k 次一操作替代。于是实际上我们要构造一组操作序列 b[b1,b2,,bnk+1]bi 代表下标为 i 的二操作执行了多少次,[bnk+1,bnk+2,,b2nk+1]bnk+1+i 表示下标为 i 的一操作执行了多少次。那么我们有如下限制:

  1. 1i2nk+1bi=mk
  2. 对于所有 i[1,nk+1]bi<k

这相当于前 nk+1 个板有上界限制的插板法。发现上界限制难做,但下界限制好做,无非是先从所有元素里划出一部分做下界然后转无限制插板法。所以我们容斥,钦定 ibi 不合法,枚举 nk+1 中哪 i 个不合法,然后有:

i=0nk+1(1)i(nk+1i)(mkik+2nk2nk)

由于 mk 很大,但是 2nk 很小,于是我们暴力处理组合数即可。

Make Biconnected

给你一棵由无向边组成的二叉树,树上每个点有权值 wi。你可以把两个点之间连无向边,如果将 uv 连边,代价是 wu+wv。请给出一种连边方式,使得连边后,图中去掉任何一个点仍然联通,即图是一个点双连通图。在此基础上,你要使代价最小。

tag:构造

发现对于度数为 1 的每个点,必定有条路径以它为一个端点。否则它会产生割点。

因此,我们将所有度数为 1 的点配对,然后两两匹配即可。每个点匹配与他距离最长的那个点。

需要注意的是这样可能会多出一个点,我们把这个点向上跳,直到跳到第一个三度点。三度点到这个叶子节点的路径必须被覆盖,于是我们在树的剩余部分找到最小值连起来即可。

All Pair Shortest Paths

给你一个 2×N 的表格,定义 f(x,y)x 走到 y 经过格子权值和的最小值,求所有 f(x,y) 之和。

tag:分治

之后的讨论中,不妨设 x 的横坐标小于 y

由于表格只有两行,因此我们的路径必定横坐标递增。因为如果走了回头路,就要再把之前走过的路再走一遍,而且没有收益。

这样的话,我们就把对 f(l,r) 的讨论限制在了 [l,r] 这个区间里。于是可以考虑分治。对于分治中心 mid,考虑左端点在 [L,mid] 之间,右端点在 [mid+1,R] 之间产生的贡献。对于左边,我们倒着做,考虑 (mid,0)(mid,1) 到左边每个点的最短路径。对于右边,我们正着做,同样是从中央两个点开始考虑。

最后一个问题,我们如何合并左右两边的答案。答案有两种情况: Al,1+Br,1Al,0+Br,0,表示走到 mid 上方的点汇合还是走到下方的点汇合。我们把右边的点按照 Bi,0Bi,1 从小到大排序,显然如果 Al,0Al,1+Br,0br,1>0 则走 Al,1+Br,1 更优。于是做一个二分后前缀和统计贡献即可。时间复杂度 O(nlog2n)

posted @   _maze  阅读(90)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
点击右上角即可分享
微信分享提示