CF1844

· · 个人记录

D - Row Major

考虑不被 n 整除的最小正整数 c,那么 [1, c-1] 中所有正整数两两有连边,答案最小为 c;而 1,2,\ldots,c,1,2,\ldots c,1,2,\ldots 的循环是合法的。

场上莽了个 O(n\cdot d(n)),属于是过了都不知道自己为什么过,成为了脑力下人。

E - Great Grids

首先一个 2\times 2 方格的两条对角线,一定是一组相同另一组不同。

想了很久用一些很几何的东西来刻画这个条件无果,尝试把 a,b,c 替换为 0,1,2,则发现 2\times 2 方格的下一行只可能是上一行在模 3 意义下 \pm 1,由此可知原网格图每一行也只可能是上一行 \pm 1,非常的 nice。

对于列也有同样的结论。也就是说知道了左上角、每行的增量 c_i\in \{0,1\}、每列的增量 l_i\in \{0,1\},即可确定原网格图。

考虑题目中的限制,其等价于限定一组 c_id_j 之间的等于/不等的关系,使用带权并查集可以解决。

F - Min Cost Permutation

先考虑 c\ge 0 的情况,显然从小到大排序是最优解,证明可以调整。

对于 c<0 的情况,只考虑权值最小显然是反过来,从大到小排序。

而保证字典序最小,可以逐位贪心地选取小数放到下一位,后面的依然按大小排序最优,虽然我也不知道为什么,但感性理解好像很正确。这样做到 O(n^2),解决 F1。

不妨我挪前面来的是 a_i,剩下没填的数中其前驱后继为 a_{i-1},a_{i+1}(a_{i-1}\ge a_{i}\ge a_{i+1}),最大的为 a_{m},填的上一个数为 b。不妨 f(x)=|x-c|,则我们需要 f(a_{i}-a_{i-1})+f(a_{i+1}-a_{i})-f(a_{i+1}-a_{i-1})=f(a_i-b)+f(a_{m}-a_i)-f(a_{m}-b) 成立。

引理:若 x\leq yf(x)+f(y)\leq f(x-1)+f(y+1)

几何意义,把 x,y 各挪开一格,其到 c 的距离之和不减。

所以取等的条件就是左右式都等于 |c|。左式成立就是“a_{i-1}-a_{i+1}\leq |c|”或“a_i 等于 a_{i+1},a_{i-1} 中某一个”,右式成立就是“b-a_i\leq |c|”。拿个 set 随便搞一下。

G - Tree Weights

对于树边 (u,v),不妨 u<v,考虑 u\rightarrow u+1\rightarrow\ldots\rightarrow v 的路径,其长度之和的奇偶性只与 (u,v) 这条边的奇偶性有关。

由此可以确定每条边的末位,而后去掉末位,重新计算每组 (i,i+1) 并右移一位继续做下去。

H - Multiple of Three Cycles