专栏文章

题解:CF718E Matvey's Birthday

CF718E题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@miqjjup3
此快照首次捕获于
2025/12/04 05:50
3 个月前
此快照最后确认于
2025/12/04 05:50
3 个月前
查看原文

Matvey's Birthday

Problem

给定一个仅包含 a~h 的字符串(八个字符)。
有一个 nn 个结点的无向图,编号为 00n1n−1。结点 ii 与结点 jj 间有边相连当且仅当 ij=1|i-j|=1Si=SjS_i=S_j
求这个无向图的直径和有多少对点间的最短距离与直径相同。
数据范围:2n1052 \le n \le 10^5

Sol

不难发现,直径一定不会超过 1515。因为我可以通过传送后走一步来切换字符。然后这个东西不是很好贪心,nn 又特别小,不难想到 DP。
不妨定义 fi,jf_{i, j} 表示点 ii 走到第 jj 个颜色的最短距离。这个东西是很好处理的,用类似于 BFS 的东西即可得到。
现在讨论直径,由于直径是 maxi,j[1,n]Zmin(ij,mincfi,c+fj,c+1)\max\limits_{i, j \in [1, n] \cap \mathbb Z}\min(|i - j|, \min\limits_c f_{i, c} + f_{j, c} + 1)。经过我们的转化,时间复杂度由 O(n2)\mathcal{O}(n^2) 变为了 O(n2)\mathcal{O}(n^2)!。
里面的 min\min 是很不好的,由于答案一定不会超过 1515,可以把 ij15|i - j| \le 15 的二元组 (i,j)(i, j) 单独拉出来跑。然后现在就只需要求 maxi,j[1,n]Zmincfi,c+fj,c+1\max\limits_{i, j \in [1, n] \cap \mathbb Z} \min\limits_c f_{i, c} + f_{j, c} + 1 了。这个东西乍一看并不好做,但是发现传送只对颜色有要求,所以对于 aia_i 相同的点,fi,cf_{i, c} 至多只会有两个值,因为如果不行的话,一定可以传送一次到达。如果记 gi,jg_{i, j} 表示颜色 ii 走到颜色 jj 的最小距离(gg 可以在求 ff 时一起得到),则显然有 gai,jfi,jgai,j+1g_{a_i, j} \le f_{i,j} \le g_{a_i, j} + 1。里面的 min\min 不好拆掉,于是考虑枚举 iijj 的答案。然后不妨令 hi,j=gai,jfi,jh_{i, j} = g_{a_i, j} - f_{i, j}。然后由于 hh 的值域很小,可以把后面一维压起来,变为 hih_{i}。发现相同的 (ai,hi)(a_i, h_i) 的答案,无论 c,jc, j 是多少,答案一定是一样的。于是可以枚举 ai,hi,c,ja_i, h_i, c, j 来进行统计。hih_i 的值有 O(2c)\mathcal{O}(2^c) 种,所以时间复杂度为 O(nc22c)\mathcal{O}(nc^22^c)。空间 O(nc+c2c)\mathcal{O}(nc + c2^c),这是因为我需要知道之前 (ai,hi)(a_i, h_i) 出现了多少次,这需要开一个桶。

Code

评论

0 条评论,欢迎与作者交流。

正在加载评论...