AtCoder Regular Contest 225 ABCD

AtCoder Regular Contest 225 - AtCoder

A - Four Coloring

给定矩阵 \(X\)\(X_{ij}\in\{1,2,3,4\}\)),构造矩阵 \(Y\)\(Y_{ij}\in\{1,2,3,4\}\)),使得对于任意相邻的 \((i_1,j_1)\)\((i_2,j_2)\) 有:

  • 如果 \(|X_{i_1j_1}-X_{i_2j_2}|=1\),则 \(|Y_{i_1j_1}-Y_{i_2j_2}|\ge2\)
  • 如果 \(|X_{i_1j_1}-X_{i_2j_2}|\ge2\),则 \(|Y_{i_1j_1}-Y_{i_2j_2}|\le1\)

保证 \(X\) 中相邻位置不同,但构造的 \(Y\) 中相邻位置可以相同。可以证明一定有解。\(N\le500\)

建立映射:

\[1\to3,\\ 2\to1,\\ 3\to4,\\ 4\to2. \]

B - Independent Nim

给定 01 串,Alice 和 Bob 轮流操作,每次操作可以选取任意数量的两两不相邻的 1,将它们变成 0。

Alice 先手,无法操作的人判负,问谁能获胜。\(T\le10^5\)\(\sum N\le2\cdot10^5\)

首先,可以将 01 串分成若干个只含有 1 的连续段,那么「两两不相邻」的限制只对每一段的内部有效。

下面将「极长连续 1 段」简称为「1 段」。

考虑如何将每个 1 段的胜负状态拼起来。

根据博弈论的知识我们知道,必胜状态可以控制到必败状态,必败状态无论怎么走都会变成必胜状态。

  1. 如果存在至少一段为必胜状态,则可以将所有的必胜段全部转变为必败状态,变为情况 2。
  2. 如果所有段都是必败状态,则无论选择其中哪些段进行操作,都会使所操作的段变为必胜状态,进而变为情况 1。
  3. 整个 01 段中的 1 的个数不断减少,故最终会收敛到全 0 串,为必败状态。

因此,对于整个 01 串,若存在至少一个极长连续 1 段为必胜,则先手必胜,否则先手必败。

现在考虑只存在连续的 1,是否必胜。设长度为 \(L\)\(k\) 为任意正整数。

  1. 边界状况:\(L=0,2\) 必输,\(L=1\) 必赢。进而 1 段全是 \(11\) 的 01 串也是必败状态。
  2. \(L=3k\),可以将 \(111\,111\,\cdots\) 变为 \(110\,110\,\cdots\),故为必胜状态;
  3. \(L=3k+1\),可以将 \(111\,111\,\cdots\,111\,1\) 变为 \(011\,011\,\cdots\,011\,0\),故为必胜状态;
  4. \(L=3k+2\),可以将 \(111\,111\,\cdots\,111\,11\) 变为 \(110\,110\,\cdots\,110\,11\),故为必胜状态。

故连续的 1 为必输状态当且仅当 \(L=2\)。进而,整局游戏先手必输当且仅当 1 段的长度全为 \(2\)

C - K Spanning Tree

边权为 0/1 的无向简单连通图,求边权和恰好为 \(K\) 的生成树,或报告无解(输出 \(-1\))。

\(T\le10^5\)\(\sum N,\sum M\le2\cdot10^5\)\(0\le K\le N-1\)

image-20260720105952459

根据以上定理,设最小生成树边权为 \(x\),最大生成树边权为 \(y\),如果 \(x\le K\le y\) 则一定有解。

考虑如何构造。构造分为三步:

  1. 由于 \(0\) 边对边权总和不产生贡献,我们先不加 \(0\) 边,到最后再加入必要的 \(0\) 边使图连通。由于 \(0\) 边无法完成的事只能用 \(1\) 边,先考虑 \(0\) 边构成的子图,形成的若干连通块只能用 \(1\) 边连起来。
  2. 之后,使用 \(1\) 边将边权凑到 \(K\)。使用并查集维护,避免形成环。
  3. 最后,使用 \(0\) 边构成完整的生成树。

根据上面的结论,这三个步骤一定可以完成。Submission #77691600 - AtCoder Regular Contest 225

D - Gap Swap (easy)

给定 \(1,2,\cdots,N\) 的排列 \(P\)。可以进行下述操作:

  • 选择 \(i,j\) 满足:
    • \(1\le i<j\le N\)
    • 对任意 \(k\) 满足 \(i<k<j\)\(P_k=k\)
  • 交换 \(P_i,P_j\),代价为 \(j-i\)

求将 \(P\) 按升序排序的最小代价。注意,如果 \(i+1=j\),则一定可以进行此操作,因此 \(P\) 一定可以被排序。

\(2\le N\le5\cdot10^5\)

Editorial - AtCoder Regular Contest 225

\(f(P)=\sum|P_i-i|\),即每个元素到达其正确位置的距离之和,最终 \(f(P)\) 会变为 \(0\)。而位置 \(P_i\) 即为元素 \(P_i\)目标位置

每次操作,让元素 \(P_i\) 向右移动 \(j-i\) 的距离,同时让元素 \(P_j\) 向左移动 \(j-i\) 的距离,则总距离减少了 \(2(j-i)\)

因此,花费 \(c\) 的代价至多可以让 \(\boldsymbol{f(P)}\) 减少 \(\boldsymbol{2c}\),故代价存在下界 \(\frac12\sum|P_i-i|\)

下面证明下界的可达性

容易发现,如果 \(P_i\)\(j\) 右边,\(P_j\)\(i\) 左边,则总距离一定可以减少 \(2(j-i)\)

因此只需要证明:只要没归位,就一定存在可选的 \(i,j\),使得 \(P_i\ge j\)\(P_j\le i\)

设所有不满足 \(P_k=k\) 的位置序列为 \(a_1,a_2,\cdots,a_t\)(按递增顺序排列),那么每次操作可选的位置为 \(a_r,a_{r+1}\)\(1\le r<t\))。

首先,\(a_r\)\(a_{r+1}\) 之间的元素都已归位,因此 \(P_{a_r},P_{a_{r+1}}\) 不可能在区间 \((a_r,a_{r+1})\) 内。

  1. \(t=2\):一定有 \(P_{a_1}=a_2,P_{a_2}=a_1\)
  2. \(t\ge3\):反证法,假设对于任一 \(a_r,a_{r+1}\) 都有 \(P_{a_r}\le a_r,P_{a_{r+1}}\ge a_{r+1}\)
    那么,对于操作 \((a_{r-1},a_r)\) 应有 \(P_{a_r}\le a_r\),对于操作 \((a_r,a_{r+1})\) 应有 \(P_{a_r}\ge a_r\)
    \(P_{a_r}=a_r\),这与 \(a_r\) 未归位的前提产生矛盾。

因此,一定存在 \(a_r,a_{r+1}\),使得 \(P_{a_r}\ge a_{r+1},P_{a_{r+1}}\le a_r\)

官方题解的证明:

由于 \(P_{a_1}>a_1,P_{a_t}<a_t\),故根据零点存在定理,一定存在相邻的 \(a_i,a_{i+1}\) 满足 \(P_{a_i}>a_i,P_{a_{i+1}}<a_{i+1}\)

综上,答案为 \(\frac12\sum|P_i-i|\)

posted @ 2026-07-20 15:37  f2021ljh  阅读(19)  评论(0)    收藏  举报