题解:P11230 [CSP-J 2024] 接龙(民间数据)
WaTleZero_pt · · 题解
这道题萌新居然想了
我们注意到
-
首先我们找出词库中所有的数字
1 作为可能的出发点。 -
接下来我们将可能的出发点后面
k-1 个数标记为可能的终止点。为了避免重复计算被卡到n^{2} 级别,我们开一个和词库一样大的动态数组b ,若S_{i,j} 可能为出发点,将b_{i,j+1} 赋值为k-1 ,这样按照b_{i,j} = \max(b_{i,j},b_{i,j-1}-1) 的转移方法,只要b_{i,j} > 0 该点就可能成为终止点。 -
如果现在已经经历了
x-1 轮循环并执行了操作2 ,我们就可以将接龙长度为x 的问题全部回答掉了。 -
然后我们要做的就是再次找出那些可能是下一轮接龙的出发点。如果
x 在至少两个人的词库中作为可能的终止点出现,那么所有人的词库中的x 都可以作为下一轮的出发点;如果x 只在一个人的词库中出现,那么除这个人以外的其他人词库中的x 都可以作为下一轮的出发点。这也是很好做的,只需要我们统计每一个数字成为终止点的次数,以及出现的位置即可。
这就算是一次完整的操作,我们继续回到操作