AtCoder Regular Contest 165

啥都不会。自闭了。

A

显然填充 \(1\) 不会影响 \(\text{lcm}\)

枚举 \(n\) 的互质且 \(\text{lcm} = n\) 的因数,看和是否 \(\le n\) 即可。

B

悲,赛时代码赛后被 hack 了。

发现对子段排序不会使排列的字典序变大。因此若存在长度 \(\ge k\) 的递增子段直接输出原排列。

否则答案与原排列的 \(\text{LCP}\) 至少为 \(n - k\)(可以通过对 \([n - k + 1, n]\) 排序达到)。我们想在不影响前 \(n - k\) 个数的顺序的前提下,最小化后面的数。

找出以 \(n - k\) 为右端点的最长递增子段,设其为 \([o, n - k]\)。则对于 \(l \in [o, n - k]\),若 \(p_{n - k} < \min\limits_{i = n - k + 1}^{l + k - 1} p_i\),就说明对 \([l, l + k - 1]\) 排序不会影响前 \(n - k\) 个数。对于所有这样的 \(l\),若 \(l_1 < l_2\),则对 \([l_1, l_1 + k - 1]\) 排序一定不劣于对 \([l_2, l_2 + k - 1]\) 排序。因为进入子段的数越少,排序结果不会变劣。

于是找出最小的 \(l\),对 \([l, l + k - 1]\) 排序即可。

若预处理以 \(n - k + 1\) 为左端点的区间最小值,使用计数排序等排序算法做到 \(O(n)\) 排序,时间复杂度就是 \(O(n)\)

C

二分 \(X\)。考虑对于一个长度为 \(3\) 的链,若链长 \(< X\) 就寄了。

否则把 \(< X\) 的边拎出来,若不是二分图也寄了。

D

显然我们想贪心地让 \([a_i, b_i], [c_i, d_i]\)\(\text{lcp}\) 最小,因为这样造成的影响最小。

于是考虑连边 \(a_i \to c_i\) 表示 \(x_{a_i} \le x_{c_i}\),若无环就有解,否则环上的点都相等,合并后更新 \(a_i, c_i\) 再做一次。如果某一时刻 \(c_i > d_i\) 了就无解。

E

考虑统计每个连通块被计算的概率。

\(f_{u, i, j}\) 为考虑 \(u\) 子树中,大小为 \(i\) 的包含 \(u\) 的连通块,除了父亲还有 \(j\) 个和这个连通块相邻的点。

转移考虑二维背包合并。

统计答案时,设连通块有 \(x\) 个点,有 \(y\) 个点与连通块相邻。那么这个连通块被统计到的概率就是 \(\frac{x! y!}{(x + y)!}\)(要保证那 \(y\) 个点在这 \(x\) 个点之前被删)。

F

记数字 \(i\) 的出现位置分别为 \(x_i, y_i\)。则若 \(x_i < x_j\)\(y_i < y_j\)\(i\) 移动到 \(j\) 前面更优,否则手玩一下,移动到哪边,总次数都一样。

考虑将 \((x_i, y_i)\) 抽象成二维平面的点,每次相当于选择一个左下角都没有其他点的点删掉,这样构成了一个合法的序列。但是要字典序最小,每次就选 \(i\) 最小的点删除。

主席树优化建图后,跑字典序最小拓扑序即可解决。

posted @ 2023-09-19 07:26  zltzlt  阅读(48)  评论(0编辑  收藏  举报