杂题记录

发布时间 2024-01-04 22:09:31作者: jeefy
  • Paw 不难发现最终的局面大概是 <<...>>,此时中间是确定的。那么考虑对于前 \(i\) 个空,形成 <<< 的局面,并且不影响后面的概率。发现有 \(2n\) 种操作,只有一种不可取,那么 \(f_i = f_{i - 1} (1 - \frac 1 {2n})\),最后求和即可。

  • Squid Game 值得注意的是这很树形 DP。将链分为直链和曲链,发现只用选根节点就可以覆盖所有曲链,也就是答案至多增加 \(1\),那么先考虑处理直链。发现直链的关键点在 \(x\) 下面一个,考虑有没有必要选他。先假定不选,那么答案自然是 \(\sum f_y\)。然而如果是关键点,一种可能的情况是选 x 覆盖,顺便也就覆盖了经过 x 的那些链,那么需要用 \(\max f_{spc_i} + 1\) 来更新答案。最后呢,对于曲链 \((x, y)\),还需要利用 \(f_x + f_y + 1\) 对答案取个 \(\max\),因为爱情。

  • [AGC045B] 这里讲一下二分的做法。

其实看到这道题的第一眼就应该想到二分,但是这个 check 比较麻烦。

\(01\) 看作网格在上下,我们手模一下可能的路径,发现一定是一个区间的奇数或者偶数位置。

这是样例 0??0 的图。

现在我们需要将路径限制在一个大小为 \(mid\) 的区间内,看是否有合法路径,这很抽象,因为上下限会随着路径而改变。但是有个十分新奇的思路,我们设置 \(mid\) 个起点,限制在一个 \(mid\) 的长条内。

这是当 \(mid = 3\) 时的三条路径。

如果将三者重叠,我们会发现每一列的合法位置是一个区间:

那么我们二分的时候维护这个区间即可,但是此时我们发现样例过不去。

对于 0??0\(k = 1\) 时,如果单纯的维护上下界会存在如下情况:

红色为实际的合法路径,但是我们会将黑色的两个点都覆盖进去。回顾 可能的路径,发现一定是一个区间的奇数或者偶数位置,那么我们可以将奇偶位置分开考虑,这样如果越过边界,那么利用 \(\pm 2\) 来修正即可。

代码非常简单:https://atcoder.jp/contests/agc045/submissions/49005863

  • # [ARC154E] Reverse and Inversion 非常好题目,经过一番神秘的推导变换,我们将式子变为了 \(\sum i^2 - \sum i P_i\) 的期望。由于 \(P_i\) 的期望很难求,考虑求 \(x\) 所在位置的期望。一个关键的考虑是如果 \(x\) 被任意操作覆盖后,期望所在的位置为 \(\frac {n + 1} 2\)。否则位置不变。随便计算一下,那么就搞定了。
  • # Mother of Dragons 大概是说先利用神秘的变换使得问题转化为求最大团。接下来就可以乱搞了……考虑状压,实际上有用的状态只有 \(O(2^{\frac n2})\) 个,记忆化即可做到正确的复杂度。然而状压怎么做?考虑状态 \(S\),随便考虑一个点 \(x\),一种可能是这个点不在点集内,那么就是 \(S - x\)。另一种考虑是这个点在,那么 \(S\) 只能和 \(x\) 能到的点集取交,于是就从 \(S \& E_x\) 转移即可。
  • # Cheap Robot 很像 刀言刀语 这道题,进行多源 djk,然后建一颗最小生成树即可。
  • # Frequency Problem (Hard Version) 非常抽象题,与出现次数相关,应该和根号相关。一个关键的结论是必须包含全局众数,否则一定可以继续扩展当前的区间直到全局众数为众数。然后我们来玩根号分治,对于出现次数 \(\gt \sqrt n\) 的数,可以 \(O(n)\) 暴力的做,并且这是简单的。但是对于 \(\le \sqrt n\) 的数呢,考虑出现次数是 \(O(\sqrt n)\) 级别的,我们可以枚举全局众数的出现次数,利用滑动窗口来求解。至于会不会遗漏答案呢,考虑滑动窗口不会向后移动,那么可能出现的情况如图在枚举的次数 \(= 2\) 时会遗漏答案。,而这可能发生,当存在一个非众数在某一段密度很大,但是此时全局众数密度很小,或者反过来也是。但是此时,我们一定可以将区间向外扩展,也就是忽略的情况比答案劣。所以不会遗漏答案。
  • # Permutation for Burenka 发现两个序列类似,当且仅当两者的笛卡尔树同构。于是同构吧,发现每个结点合法的值都是一个区间,并且答案的值也是一个区间。相当于现在有一些区间和一些点,用这些点来覆盖这些区间,求剩下的至少/至多为多大。这是简单的贪心。但是注意判断无解的情况。
  • # [ARC135D] Add to Square 离谱的构造,看到方格,想想黑白染色,顺便也就将黑白的正负号逆转一下,那么发现操作后行列和不会变化。可以得到两个矩阵可以相互转化当且仅当行列和全等。那么开始构造,如果行列符号相同,那么随便放一个绝对值小的就可以消掉一行。接下来如果行列符号不同,那么我们只在行间或者列间平衡即可。这样可以构造出下届 \(\max (\sum |S_{xi}|, \sum |S_{yi}|)\)
  • # [ARC149E] Sliding Window Sort 非常好题目。首先发现的是如果 \(K > N - M + 1\),那么后面的操作都只是让 前 \(N - M + 1\) 小数循环位移,将这些数提出来单独位移一下就可以得到 \(K = N - M + 1\) 时的序列。当 \(K < N - M + 1\) 时,我们只需要将后面没有用到的数都删掉,离散化一下有变成了 \(K = N - M + 1\) 时的请况。问题简化了,来啃硬骨头。发现如果存在一个 \(A_i\) 前面有 \(A_j > A_i\),那么 \(A_i\) 就不能在前面存在,反之,\(A_i\) 可以存在在长为 \(M\) 的区间中,任意位置,那么方案即使剩下的 \(N - M + 1\) 个数的前缀最大值的个数幂次 \(m\)。不过最大的 \(M - 1\) 个数任意填,那么需要有一个 \((m - 1)!\) 的系数。
  • # [ARC156F] Make Same Set 非常好题目,对于网络流的抽象理解又抽象了很多。考虑单纯的网络流只能解决可以不选的情况。但是如果我们在开始,在网络流上就强制了所有能选 \(A\) 的选 \(A\),得出的答案就会是正确的,考虑为什么。 这是可能建出来的图,考虑一个都不选的路径,大概就是说对应的路径都没有流,也就是存在一条流曲折流过来将流给堵住了,使得这个点都不选,但是在此之前,这条路是存在流的。也就是只有非最短路流才会导致这个情况。那么利用 dinic,每次沿着最短路走,就不会有这个问题。