• CF1110G


    第一次独自切掉 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 是偶数的条件也是可以的。

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

    珍爱生命,远离抄袭!
  • 相关阅读:
    多线程中的静态代理模式
    ARP报文
    静态链表代码
    顺序表中的思路
    数据结构与算法
    我是见鬼了吗?这是史上最邪恶的脚本!没有之一
    细说"回车"和"换行"的故事
    SVN版本控制系统搭建(结合http服务)
    cooike和session到底是个啥
    Python3中 if __name__=='__main__'是个什么意思
  • 原文地址:https://www.cnblogs.com/ycx-akioi/p/solution-cf1110g.html
Copyright © 2020-2023  润新知