首页 > 其他分享 >2023 年 10 月训练记录

2023 年 10 月训练记录

时间:2023-10-07 11:35:23浏览次数:42  
标签:10 子树内 训练 偶树 skip 先手 2023 操作 获胜

训练记录

10 月了。

CF457F An easy problem about trees

尝试理解,感谢 cz_xuyixuan 的题解

我们不妨先二分答案,将 \(\ge mid\) 的设为 \(1\),\(<mid\) 的设为 \(0\),于是问题转化为了权值均为 \(0/1\) 的版本。

我们称一棵树的大小为其非叶节点数。

我们称一棵大小为奇数的树为奇树,大小为偶数的树为偶树。

对于奇树有两棵偶子树的情况:最后一次操作由先手完成。我们称,先手能够在当前子树内获胜当且仅当他能在任意一棵子树作为先手内获胜。这是因为如果先手可以在任意一棵子树内获胜,他就可以采取模仿的策略:先在他能赢的子树内操作,如果后手去操作了别的子树,则先手也同样去另一棵子树操作。反之,后手也可以用同样的策略,使得先手在两棵子树内都无法获胜。

对于奇树有两棵奇子树的情况:注意到一棵子树被操作完后,另一棵子树的先后手会发生变化,所以情况就变得更加复杂了,不能单纯地模仿。我们观察其中一棵子树就会发现操作的形式相当于跳过了一次自己的回合,先后手都有这样的机会。于是我们增设状态 \(skip\):

可以发现的是,多次跳过回合是没有意义的,因为对方玩家同样可能进行跳过,而使我方上次的跳过失效,因此,只需要记录是否可以跳过的回合。

  • \(=0\):不能 \(skip\);
  • \(=1\):可以 \(skip\);
  • \(=2\):先手可以 \(skip\),若先手不 \(skip\),后手必须 \(skip\)。

于是,我们分情况讨论:

  1. \(skip=0\):

    1. 奇树有两棵偶子树:先手能获胜当且仅当在任意一个子树内的 \(skip=0\) 能获胜;

    2. 奇树有两棵奇子树:先手能获胜当且仅当在任意一个子树内的 \(skip=1\) 能获胜;

    3. 偶树:显然有一个奇子树和一个偶子树。我们不妨枚举先手的第一步操作:

      1. 操作奇树,那么对于后手相当于情况 1.1。所以,先手能获胜当且仅当先手能奇树中 \(skip=0\) 获胜,并且后手不能在偶树中 \(skip=0\) 获胜;
      2. 操作偶树,那么对于后手相当于情况 1.2。所以,先手能获胜当且仅当先手能奇树中 \(skip=1\) 获胜,并且后手不能在偶树中 \(skip=1\) 获胜。

      先手可以选择操作。

  2. \(skip=1\):

    先手首先可以考虑 \(skip\),若后手不能在剩余局面中获胜,则先手获胜。

    注:这里我还不会证明先手一定会 \(skip\) 来获得子树内的最后一次操作的权利。感性理解下,感觉很有道理。

    1. 偶树:我们声称先手一定会 \(skip\) 来获得子树内的最后一次操作的权利。那么,先手有如下两种操作:
      1. 先手如果可以在偶树中 \(skip=0\) 获胜,则先手必胜。这是因为先手可以不停地在偶树中操作,那后手有两种可能:

        1. 操作了奇树,先手选择 \(skip\)。
        2. \(skip\) 了。

        上述两种情况都变成了情况 1.1,先手只需要模仿即可。

      2. 先手如果可以在奇树中 \(skip=1\) 获胜,则先手必胜。这是因为先手可以不停地在奇树中操作,那后手有两种可能:

        1. 操作了偶树,则先手选择 \(skip\);
        2. \(skip\) 了。

        上述两种情况都变成了情况 1.1,先手只需要模仿即可。

        不过,先手也可以选择在操作奇树的时候 \(skip\),所以是 \(skip=1\)。

        不过有个特例:假设偶树的大小为 \(0\),则后手可以不选择操作偶树,所以,左子树就变成了 \(skip=2\) 的情况。

    2. 奇树有两棵偶子树:我们枚举先手的第一次操作,于是对于后手就变成了 2.1 的局面。
    3. 奇树有两棵奇子树:我们枚举先手的第一次操作,于是对于后手就变成了 2.1 的局面。
  3. \(skip=2\):

基本和 \(skip=1\) 类似。

  1. 偶树:我们声称先手一定会 \(skip\) 来获得子树内的最后一次操作的权利。那么,先手有如下两种操作:
    1. 先手如果可以在偶树中 \(skip=0\) 获胜,则先手必胜。这是因为先手可以不停地在偶树中操作,那后手有两种可能:

      1. 操作了奇树,先手选择 \(skip\)。
      2. \(skip\) 了。

      上述两种情况都变成了情况 1.1,先手只需要模仿即可。

    2. 先手如果可以在奇树中 \(skip=1\) 获胜,则先手必胜。这是因为先手可以不停地在奇树中操作,那后手有两种可能:

      1. 操作了偶树,则先手选择 \(skip\);
      2. \(skip\) 了。

      上述两种情况都变成了情况 1.1,先手只需要模仿即可。

      不过,先手也可以选择在操作奇树的时候 \(skip\),所以是 \(skip=1\)。

      这种情况不需要分偶树大小为 \(0\) 讨论,因为根据状态定义,若先手不 \(skip\),后手必须 \(skip\)。

      所以只需要执行 \(skip=1\) 即可。

  2. 奇树有两棵偶子树:我们枚举先手的第一次操作,于是对于后手就变成了 3.1 的局面。
  3. 奇树有两棵奇子树:我们枚举先手的第一次操作,于是对于后手就变成了 3.1 的局面。

时间复杂度 \(O(n\log a)\)。

不过,我们可以把状态记成 \(\min/\max\) 从而避免二分。

时间复杂度 \(O(n)\)。

记录

标签:10,子树内,训练,偶树,skip,先手,2023,操作,获胜
From: https://www.cnblogs.com/zhaohaikun/p/17745878.html

相关文章

  • C#/.NET/.NET Core优秀项目和框架2023年9月简报
    思维导航前言DncZeusIEJIE.NETObfuscarConfuserExCommon.UtilityOptimizerJustDecompilednSpyILSpyQuickLookWingTaiFreeSchedulerCollectiveOAuth加入DotNetGuide技术交流群前言公众号每月定期推广和分享的C#/.NET/.NETCore优秀项目和框架(公众号每周至......
  • 10.7算法
    将有序数组转换为二叉搜索树给你一个整数数组nums,其中元素已经按升序排列,请你将其转换为一棵高度平衡二叉搜索树。高度平衡二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过1」的二叉树。 示例1:输入:nums=[-10,-3,0,5,9]输出:[0,-3,9,-10,null,5]......
  • 33dai NOIP2023模拟赛35 赛后总结
    做题历程8:00~8:40写A。8:40~9:40看B,C想B,写B。9:40~10:40手玩了一下C,推出了那个规律。10:40~11:20写C。11:20~12:00看了看D,尝试写dp暴力,没空,最后随便写了写。总结写代码要注意细节,不然容易挂。题解A倒序做一遍双指针,没什么好说的。不过有很多人用奇......
  • 2023-10-07
    一、.NETReflector反编译工具https://www.onlinedown.net/article/10011846.htm可反编译.NET平台开发生成的exe程序。 二、防止反编译要防止exe程序被反编译,可以采取以下几种措施:1.加密和混淆代码:使用专业的加密和混淆工具对代码进行处理,使得反编译者难以理解代码含义,从......
  • 2023-2024-1 20231419 《计算机基础与程序设计》第二周学习总结
    2023-2024-120231419《计算机基础与程序设计》第二周学习总结作业信息这个作业属于哪个课程https://edu.cnblogs.com/campus/besti/2023-2024-1-CFAP这个作业要求在哪里https://www.cnblogs.com/rocedu/p/9577842.html#WEEK02这个作业的目标预习《计算机科学概......
  • KubeSphere 社区双周报 | OpenFunction v1.2.0 发布 | 2023.09.15-09.28
    KubeSphere社区双周报主要整理展示新增的贡献者名单和证书、新增的讲师证书以及两周内提交过commit的贡献者,并对近期重要的PR进行解析,同时还包含了线上/线下活动和布道推广等一系列社区动态。本次双周报涵盖时间为:2023.09.15-2023.09.28。贡献者名单新晋KubeSphereCon......
  • 2023-10-06-周六
    国庆放假最后一天,,,本来说初中同学那几个聚会的然后,,,,,因为一些原因,,大家没有聚会哦豁....这一天....好像....有碌碌无为上午起床起得很晚然后一整天去实验室好像啥也没干然后晚上请ice,zk,tyj吃饭只能说,,他们好像都请过吃饭,我好像都是去混吃混喝,,,没请过所以这......
  • 10 对比不同的优化算法
    importnumpyasnpimportmatplotlib.pyplotaspltimportscipy.ioimportmathimportsklearnimportsklearn.datasetsfromopt_utilsimportload_params_and_grads,initialize_parameters,forward_propagation,backward_propagationfromopt_utilsimportcomp......
  • 《流畅的Python》 读书笔记 231007(第二章第一部分)
    第2章数据结构ABC语言是Python的爸爸~很多点子在现在看来都很有Python风格:序列的泛型操作、内置的元组和映射类型、用缩进来架构的源码、无需变量声明的强类型不管是哪种数据结构,字符串、列表、字节序列、数组、XML元素,抑或是数据库查询结果,它们都共用一套丰富的操作:迭......
  • 笨办法学Python3 习题25 更多更多的训练
    练习内容:将ex25模块导入在终端中手动运行函数查看变化结果退出quit()1defbreak_words(stuff):2"用来分割参数元素"3words=stuff.split('')4returnwords56defsort_words(words):7"用来将参数元素升序排列"8returnsorted......