CF1110G - Tree-Tac-Toe 题解

第一次独自切掉 3100(前纪录是 2900),是在模拟赛里面做出来的,写个题解纪念一下。


首先 Black 一定是不会赢的,这个感性理解一下就可以了。

然后对于这种像个智力题一样的博弈,一般都是分成各种 corner case 讨论掉以覆盖掉所有情况。

我们先不管有已经被涂了的点,那只会让 White 更牛逼。

显而易见的是,有四度点的话 White 必胜。于是下面从讨论最大度数为 1~3。

1 的话就不用说了吧……2 是一条链,可以发现如果没有一开始涂的颜色是一定不会赢的。考虑涂颜色:n=3 必须要有两个点被涂了;n>3 的话,你会发现如果有任何一个非叶子被涂了的话就赢定了,因为连续两个被图且两端都可扩展这个定式是必胜的。进一步,如果 n 是奇数且两端都被涂那也行,就一路小跳过去汇合。

最大度数为 3 的时候。找到任意一个三度点,不难发现如果有两个儿子不是叶子那么必胜。于是先在只有 1 个儿子有儿子(0 个的话就停下来了)。那么就往下跑,如果当前最低点往下没有儿子就停了;如果有 1 个儿子,就线性地往下递归讨论;如果有 2 个儿子,算上爸爸它就是个三度点了,爸爸不是叶子,于是被迫停下。于是不难发现最大度数为 3 时只可能是两种情况:

  1. 两个三度点用一条链连起来。这个不涂色的话,不难发现 n 是奇数可以胜,否则需要任意涂一个;
  2. 一个三度点下面挂一条链。没涂色就萎掉了;否则如果在菊花和非叶的地方涂色是可以的,在叶子地方配上 n 是偶数的条件也是可以的。

代码是码农活,就不贴了。

posted @ 2021-03-09 00:05  ycx060617  阅读(63)  评论(0编辑  收藏  举报