IMOSL2019 C3~C9

发布时间 2023-08-06 21:22:14作者: alfalfa_w

C3

有一个很妙的做法。考虑把整个过程倒过来看。一开始,有一个指针在位置 \(0\),所有硬币都是 T。每次,

  • 可以把指针右移一位,使得移动后的指针指向一个 T,之后要把这个 T 变为 H
  • 可以把指针左移一位,使得移动后的指针指向一个 H,之后要把这个 H 变为 T

考虑左移 / 右移操作形成的连续段,设它们的长度形成的序列为 \(a_1,a_2,\cdots,a_k\)。那么 \(a\) 需要满足

\[n\ge a_1>a_2\cdots>a_k\ge 1 \]

设所有可能的序列形成集合 \(A\),所有可能的硬币初始状态形成集合 \(B\)

对于一个序列 \(a\),设它对应的硬币初始状态为 \(f(a)\)。需要证明 \(\forall a^0\ne a^1\)\(f(a^0)\ne f(a^1)\)。可以找到 \(a^0,a^1\) 的最长公共前缀 \(a_{1..i}\),则 \(b^0,b^1\) 的第 \(a_1-a_2+\cdots+(-1)^i\max(a^0_{i+1},a^1_{i+1})\) 位一定不同,得证。

又因为 \(|A|=|B|=2^n\),所以 \(f:A\to B\) 为双射。故答案为 \(E(\sum a_i) = \frac{n(n+1)}{4}\)

C4

设连通块个数为 \(c\),则 \(c\ge 1+\frac{n(n+1)}{2} - \frac{n(n-1)}{2} = n+1\)。考虑构造一种方案。不妨假设所有直线都不与 \(y\) 轴平行。那么我们把每条直线靠上的一侧涂红。对于每条直线,把涂红的一侧的所有区域的高度都 \(+1\)。可以观察到,所有区域的高度都位于 \([0,n]\) 中,且高度相同的所有区域被连通了,因此构造是正确的。

C5

\(n=1009\),则图中有 \(n\) 个度数为 \(n+1\) 的点和 \(n+1\) 个度数为 \(n\) 的点。

首先,图是连通的,因为对于任意两点 \(u,v\)\(\text{deg}(u)+\text{deg}(v)\ge 2n\),故 \(\text{dis}(u,v)\le 2\)

使用这题的操作,对于不是完全图、不是一个环的任意连通图,都是有解的。下面我们尝试证明这一点。

首先,把图变成一棵树。只需不断进行不改变图的连通性的操作,使边数不断减少。

观察到,对于一个环 \(a_1 - a_2 - \cdots - a_k - a_1\) 和结点 \(u\),如果边 \((u,a_1)\) 存在且边 \((u,a_k)\) 不存在,就可以操作一次使 \((a_1,a_k)\) 不存在、\((u,a_1)\) 不存在、\((u,a_k)\) 存在。这样不改变图的连通性。

考虑图中的最小环,设它的长度为 \(c\)。那么 \(c\ne n\),分类讨论:

  • \(c>3\),找到一个不在环上的点 \(u\) 使得它和环上的至少 \(1\) 个点相邻。\(u\) 不可能与环上相邻两点都有边 (否则 \(c=3\)),因此可以选择任意一个在环上且与 \(u\) 相邻的点作为 \(a_k\)
  • \(c=3\),找到图中任意一个点数 \(\ge 3\) 的极大团,找到一个不在团上的点 \(u\) 使得它和团上的至少 \(1\) 个点相邻。由于是极大团,\(u\) 不和团上的所有点相邻,因此可以选择任意一个在团上且与 \(u\) 相邻的点作为 \(a_k\)

现在图已经变成了树。那么,对于每个点数 \(\ge 3\) 的连通块,必定存在度数 \(\ge 2\) 的点,因此一定能不断进行操作直到满足题意。

C6

不妨假设任意两点的横、纵坐标均不同。把点按照横坐标排序,然后 \(\forall 1\le i\le n\),选择性地交换 \(A_{2i-1}, A_{2i}\) 使得交换后 \(y(A_{2i-1})<y(A_{2i})\)。可以证明这种顺序是合法的。

\(\vec{v_i}\) 为起点为 \(A_{2i-1}\)、终点为 \(A_{2i}\) 的向量,\(\vec{x^+}\)\(x\) 轴正半轴,\(\alpha_i\)\(\vec{v_i}\)\(\vec{x^+}\) 的夹角。考虑相邻的 \(2\) 个向量 \(\vec{v_i}\)\(\vec{v_j}\) (需要满足 \(j=i\bmod n+1\)),记 \(\beta_i\)\(\angle A_{2i-1}A_{2i}A_{2i+1}\)\(\gamma_i\)\(\angle{A_{2i}A_{2i+1}A_{2i+2}}\)。如果用 \(\pm \beta_i\pm \gamma_i\) 能凑出 \(\alpha_j-\alpha_i\),最终就能凑出 \(\sum \alpha_j-\alpha_i = 0\)

\(\alpha_j = \alpha_i\) 时,\(\beta_i = \gamma_i\),一定正确。对于其它情况,不妨设 \(A_{2i}\)\(A_{2j}\) 的左边,且 \(\alpha_i>\alpha_j\)。记射线 \(A_{2i}A_{2i-1}\) 与直线 \(A_{2j-1}A_{2j}\) 的交点为 \(O_i\),讨论 \(O_i\) 是否在射线 \(A_{2j-1}A_{2j}\) 上,如图,均合法。

C7

设有 \(2m\) 个盒子,第 \(i\) 个盒子里有 \(x_i\) 个球。

首先,\(n=m(m+2)\) 时 Alice 必胜。一开始 Alice 令 \(x_i = |i-m|+1\)。设 \(c_i\) 为当前给 \(x_{1..i}\) \(-1\) 并给 \(x_{i+1..n}\) \(+1\) 的次数 (可以是负数)。无论 Bob 怎么选,Alice 可以将 \(c_{1..m-1}\) 保持在 \([0,1]\) 中,将 \(c_{m..2m-1}\) 保持在 \([-1,0]\) 中,这样永远保证 \(x_i>0\)

其次,\(n<m(m+2)\) 时 Alice 必败。假设存在 \(x\) 的一个子序列 \(y_k,\cdots,y_1,z_1,\cdots,z_l\) 满足 \(y_k\le k,z_l\le l\)。那么 Bob 的策略如下:

  • 指定 \(y_1|z_1\),不妨设 Alice 给前缀 \(-1\)。维护一个操作栈,在栈中加入这个操作。
  • 设栈大小为 \(s\),指定 \(y_{s+1}|y_s\)
    • 若 Alice 给前缀 \(+1\),则这次操作和栈顶操作加起来只会让 \(y_s\) \(-1\),那么直接弹栈。
    • 若 Alice 给前缀 \(-1\),则将操作加入栈。
  • 由于每次弹栈,所有数的总和会变小,因此不可能永远弹栈。最终我们会得到大小为 \(k\) 的栈,使得 \(y_k=0\)

若 Alice 必胜,\(x\) 不存在该子序列,因此所有区间 \([i-x_i,i+x_i]\) 有交。区间均包含 \(m\)\(n_{\min}=m(m+2)\)

C8

首先设一个点 \(rt\),初始为 \(1\)。对于 \(i=2..n\) 依次询问 \((rt,i)\),如果是 \(rt\to i\) 则把 \(rt\) 更新为 \(i\)。最后可以得到一棵根为 \(rt\) 的有根内向树,且存在一条主链,所有点都和它的距离不超过 \(1\)

然后依次询问 \(rt\) 和所有点 \(u\)。如果是 \(u\to rt\)\(u\) 已经有 \(2\) 条出边,直接删掉。直到找到 \(rt\to u,v\) 为止,此时可以删掉 \(rt\)。假设剩余 \(m\) 个点 (\(m\ge 3\)),此时用了 \(2n-m\) 步,且剩余 \(m\) 个点之间问过的边形成森林。每次问 \(2\) 个叶子,可以删掉一个。最终至多剩下 \(2\) 个点,它们之间有边,把它们暴力地和剩余的点问即可。由于 \(m\ge 3\),剩余 \(2\) 点中其中至少 \(1\) 个点和外界有至少 \(1\) 条边已经问过了,总步数 \(2n-2+2n-5 = 4n-7\)

C9

\(f(a_{1..n})\) 为,是否存在 \(x_1<\cdots<x_n\) 使得

\[s_i=\bigg|\left\{\left\lfloor\log_2|x_i-x_j|\right\rfloor\Big|j\ne i\right\}\bigg|\le a_i \ (\forall 1\le i\le n) \]

\(n=1\) 时,\(f(a_1)=1\Leftrightarrow a_1\ge 0\)

\(n\ge 2\) 时,不妨设 \(x_1=0\)。设 \(d\) 满足 \(2^d\le x_n< 2^{d+1}\)。那么 \(\forall 1\le i\le n\)

\[\exists|x_i-x_j|\in [2^d,2^{d+1})\Leftrightarrow x_i\not\in (x_n-2^d,2^d) \]

\[\begin{split} x_n-2^d&\in [x_k,x_{k+1}), \\ 2^d&\in (x_l,x_{l+1}] \end{split} \]

相当于去掉权值为 \(d\) 的边后,\(\forall i\in [1,k]\cup[l+1,n]\)\(s_i\le a_i-1\)

那么,若 \(f(a_{1..n})=1\),则 \(\exists 1\le k\le l\le n-1\)

\[\begin{split}f(a_1-1,\cdots,a_k-1,a_{k+1},\cdots,a_l) & = 1 \\\and f(a_{k+1},\cdots,a_l,a_{l+1}-1,\cdots,a_n-1) & = 1\end{split} \]

对于 \(f(a_{1..n})=1\) 的状态,设 \(\phi(a_{1..n})=\sum_{i=1}^{n} 2^{-a_i}\),那么

  • \(n=1\) 时,\(\phi(a_1)\le 1\)
  • \(n\ge 2\) 时,\(\phi(a_{1..n})=\) 其后继 \(2\) 个状态的 \(\phi\) 的平均数。

归纳,可以证明 \(\phi(a_{1..n})\le 1\)。因此,符合题意的 \(n_{\max}=2^k\),一种合法方案是 \([0,2^k)\cap \Z\)