zoukankan      html  css  js  c++  java
  • ABC209 E Shiritori

    考虑对这个问题进行转化:

    显然我们只关注每个串前三个棋子和后三个棋子,并且根据题目的特性,我们可以将任意的三个字符看作点,将一个字符串看作连接两个点的边,这样我们得到了一张点数为 (52 ^ 3),边数为 (n) 的有向图。

    此时问题就转化为:两个人在一张有向图上博弈,轮流操作。有一个棋子在点上,每次可以将该棋子移动到一个后继节点,不能动的人输。在先手后手都走最优策略的情况下,请问棋子一开始在每个节点最终局面的输赢 / 平局状态。

    如果该图为一张 ( m DAG),那么这个问题非常简单,若存在环,问题就变得复杂了。

    但不论问题如何变化,这依然满足博弈论状态的转移关系。

    我们类似 ( m DAG) 的做法令 (f_i) 为棋子在节点 (i) 开始为必胜(1),必败(0),平局(-1)。

    对于每个节点,若节点 (i) 的后继存在一个必败态节点,那么该点为必胜态;若节点 (i) 的所有后继均为必胜态,那么该点为必败态。

    据此,我们先通过能确定的点将该图所有必胜态必败态的节点求出(因为这些节点的后继一定不存在节点状态不确定)。

    此时我们发现,那些没有确定状态的点,后继中确定了状态的点一定是必胜且一定存在一个点没有确定状态。

    注意到任何一个人都不会直接移到必胜态上去,因此双方都只会移到不确定的状态上去。

    此时就会在不确定的状态上开始无限循环操作,因此所有没有确定状态的节点都是平局节点。

    可以发现上述做法的复杂度瓶颈在于求出可以确定状态的节点,这部分用类似拓扑排序的方式是 (mathcal{O}(n)) 的。

    GO!
  • 相关阅读:
    使用git svn工具进行svn 到git仓库的同步[持续更新]
    解决Linux无法存储svn密码
    spring boot @ResponseBody 注解情况下返回自定义类报错406
    解决mysql密码正确的情况下而无法连接的问题
    react项目实现国际化i18n
    github clone加速
    Centos模板机配置
    Xshell终端连接服务器慢,问题解决方法
    佛祖保佑永无 BUG 代码注释
    本地代理web端口
  • 原文地址:https://www.cnblogs.com/Go7338395/p/14998626.html
Copyright © 2011-2022 走看看