几道好欺负的杂题

P7325 [WC2021] 斐波那契

会同余 + set 可以解决改题。

CF1264D1 Beautiful Bracket Sequence (easy version)

性质题,找到性质后就不会很难了

CF1264D2 Beautiful Bracket Sequence (hard version)

上一道题的强化版,如果你会范德蒙德卷积就很简单了,否则需要考虑组合意义来优化 dp

CF1608F MEX counting

好前三道题是因为写了题解了就不多说了,这里把这道题的题解写一写。

分析题目,发现题目的意思是想让我们的 \(\text{MEX}\) 处在一个范围 \([l,r]\) 之内。

首先最朴素的 dp 状态还是比较套路的,就是设 \(dp_{i,j,k}\) 为已经处理到了 \(i\) 个数,此时的 \(\text{MEX}\)\(k\),且比它大的有 \(j\)不同的数的方案数有多少。我们首先不难想到将转移分为两大类,分别是接下来填的数不是 \(\text{MEX}\) 和接下来填的数是 \(\text{MEX}\) 这两类。

考虑接下来填的数不是 \(\text{MEX}\) 怎么转移,我们可以发现有三类转移:

  1. 填了一个小于当前 \(\text{MEX}\) 的数字:

\[dp_{i,j,k} \to dp_{i+1,j,k} \]

  1. 填了一个大于当前 \(\text{MEX}\) 且之前出现过的数字:

\[j \cdot dp_{i,j,k} \to dp_{i+1,j,k} \]

  1. 填了一个大于当前 \(\text{MEX}\) 且之前没出现过的数字:

\[dp_{i,j,k} \to dp_{i+1,j+1,k} \]

考虑接下来填的数字是 \(\text{MEX}\) 该怎么转移,显然有废话 “如果 \(\text{MEX}\) 的值发生改变,则新改变的值一定大于原先的值”,所以考虑枚举新的 \(\text{MEX}\) 转移,设新的 \(\text{MEX}\)\(t\),于是有:

\[A^{j}_{t-k-1} \cdot dp_{i,j,k} \to dp_{i+1,j-(t-k-1),t} \]

此时,我们不难看出我们的时间复杂度为 \(\mathcal O (n^4)\),空间复杂度为 \(\mathcal O(n^3)\),无法通过此题。

考虑如何优化,首先我们可以发现在进行接下来填的数字是 \(\text{MEX}\)的转移时,有很多转移是没有必要的,事实上我们只需要转移 \(k\) 次就好,因为当我们的 \(\text{MEX}\) 大于 \(k\) 的时候是显然没有意义的,此时时间复杂度被优化到 \(\mathcal O(n^2 k^2)\),依旧无法通过此题。

我们仔细观察最后一种转移,发现其本质就是做了一次相邻的斜着的转移,所以完全可以做前缀和,但是发现如果这样搞前缀和是一个斜着的情况,所以我们可以给第二个状态 \(+k\) 将斜着的转移拉直,考虑这样之后的转移的变化:

\[j \cdot dp_{i,j,k} \to dp_{i+1,j,k} \]

\[dp_{i,j,k} \to dp_{i+1,j+1,k} \]

\[\frac{(j-k)!}{(j-1-t)!} \cdot dp_{i,j,k} \to dp_{i+1,j+1,t} \]

时间复杂度被我们优化至 \(\mathcal O(n^2k)\),可以通过本题,实际上还需要一点点的卡常技巧。

对于 \(i\) 这一个维度,我们可以考虑滚动数组来优化我们的空间,否则应该会炸。

AGC054D (ox)

先吐槽一嘴,这个 o 表示 (),这个 x 表示 )(,十分形象。

好,我们先观察原序列,容易得出第一条性质:

ox 的加入不会让我们不合法的序列变合法,相反,它会让我们合法的序列变不合法。

于是可以得出,无论如何,只要我们想要得到合法的序列,我们肯定都要先将去除 ox 的括号序列变得合法。

那么惯性的思考下去,也就是我们可以将贡献拆开算,分别是忽略 ox 后的括号序列变合法的最小步数ox 步数的平衡

这个时候可能会晕的一点是,为什么可以这么拆,或者说,为什么计算最小步数的时候可以忽略中间的 ox。其实,我们并没有忽略掉我们的 ox,只不过我们运用了两个视角来计算同一件事请而已,我们先忽略 ox 从纯括号中观察得到纯括号序列的移动步数,然后再从 ox 的角度观察序列的变化。此时不但得出,对于 ox 来说,我们的变化就是原序列经过变换后的逆序对数。

然后最后一步进行 dp 就是比较朴素的,设 \(dp_{i,j}\) 为已经观察了 \(i\) 个括号和 \(j\) 个序列后,我们观察出的最小步数。

然后需要特殊考虑一下 x 的位置,不难看出,x 只能在 ( 的后面。所以转移的时候需要特判。

ARC104F Visibility Sequence

需要转化的喵喵题。

我们需要把原问题转化成一个图论计数问题,然后剩下的就很好办了。

好,首先让我们修改一下题目的要求,将不存在的情况设为 \(p_i = 0\),这样就可以使得我们的 \(p_i\) 的值只可能取到自然数集合中连续的一段 \([0,n-1]\) 了。

考虑连边 \((i,p_i)\),我们首先能得到一个十分显然的性质,就是最终连边连出来的图必定没有环,证明显然,考虑偏序关系不允许出现环即可。

但是这个性质不是很强,我们还可以进一步得到相比更强的性质,就是连出来的图必定是一棵树,这个证明考虑 \(p_i\) 的值只会取到 \([0,i-1]\) 而已,又因为不会出现环,故现在此时连出来的是一棵树,并且是以 \(0\) 为根节点的树。

现在让我们观察一下每个节点上 \(h_i\) 的值,不难发现兄弟之间左方的兄弟的 \(h\)\(\le\) 右方的兄弟的 \(h\) 值,且当前节点的 \(h\) 值一定大于他的儿子们。证明显然,考虑如果左方的兄弟大于自己,则自己会被左方的兄弟支配,变成他的儿子,故左右兄弟之间是 \(\le\),考虑如果自己的儿子大于等于自己,那么它必定会成为自己的兄弟甚至是祖先的兄弟,故父亲儿子之间是 \(\gt\)

让我们定义 \(a_i\)\(i\) 左边第一个的兄弟,让 \(b_i\)\(i\) 最右边的儿子,设 \(c_i=\max\{c_{a_i} , c_{b_i} + 1\}\),则此时 \(c\) 必定是 \(h\) 的构造方案之一(证明考虑兄弟之间的偏序关系和父亲儿子之间的偏序关系),并且对于任意的 \(h\) 我们都有 \(h_i \ge c_i\),于是可以比较 \(c_i\)\(x_i\) 就可以看出 \(p\) 是否合法。

最后,设 \(dp_{i,j,k}\) 为区间 \([i-1,j]\) 形成了一棵树,且 \(c_{b_{i-1}} \le k\) 时,\([i,j]\) 的方案数,时间复杂度 \(\mathcal O(n^4)\)

AGC017D Game on Tree

经典 Hackenbush 游戏,只不过只有绿边而已,故为一个非常 Easy 的树上 Nim 游戏。

然后……就没然后了,这种题能评紫是出乎意料的。

posted @ 2023-05-02 16:00  Larry76  阅读(29)  评论(0编辑  收藏  举报