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

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

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

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

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

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

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

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

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

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

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

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

ABC209 E Shiritori的更多相关文章

  1. AtCoder Beginner Contest-060

    A - Shiritori Problem Statement You are given three strings A, B and C. Check whether they form a wo ...

  2. 2018.09.08 AtCoder Beginner Contest 109简要题解

    比赛传送门 水题大赛? 全是水题啊!!! T1 ABC333 就是判断是不是两个数都是奇数就行了. 代码: #include<bits/stdc++.h> using namespace ...

随机推荐

  1. Chapter 15 Outcome Regression and Propensity Scores

    目录 15.1 Outcome regression 15.2 Propensity scores 15.3 Propensity stratification and standardization ...

  2. MySQL数据操作与查询笔记 • 【目录】

    持续更新中- 我的大学笔记>>> 章节 内容 第1章 MySQL数据操作与查询笔记 • [第1章 MySQL数据库基础] 第2章 MySQL数据操作与查询笔记 • [第2章 表结构管 ...

  3. VNC的安装和使用

    说明 VNC (Virtual Network Console)是虚拟网络控制台的缩写.它是能远程连入Linux进行图形化操作. VNC百度百科介绍:https://baike.baidu.com/i ...

  4. Solr单机安装Version5.5.2

    Solr安装单机模式,基于Solr的安装版本为5.5.2. 安装规划 IP/机器名 安装软件 运行进程 zdh-9 solr jar 安装用户 solr/zdh1234 hadoop useradd ...

  5. 抛弃go-micro,使用极简微服务框架Bull

    简介 Bull是一款基于GO语言的极简微服务框架. 使用GRPC作为RPC协议,使用ETCD作为注册中心. 框架目前已经实现了服务注册.服务发现(客户端轮训)功能. 整体架构 代码地址 https:/ ...

  6. Flask_Flask-Mail邮件扩展(十三)

    在开发过程中,很多应用程序都需要通过邮件提醒用户,Flask的扩展包Flask-Mail通过包装了Python内置的smtplib包,可以用在Flask程序中发送邮件. Flask-Mail连接到简单 ...

  7. win11系统设置笔记本合盖上不休眠

    第一步.打开控制面板 第二步.打开控制面板 第三步.打开电源选项 第四步.如下图操作即可

  8. uni-app、小程序之swiper-item内容过多显示不全的解决方案

    原文 最近在项目遇到swiper高度不能自适应,导致swiper-item 里面的内容过多时只能显示一部分,最终解决方案: <swiper> <swiper-item> < ...

  9. c#多进程通讯,今天,它来了

    引言 在c#中,可能大多数人针对于多线程之间的通讯,是熟能生巧,对于AsyncLocal 和ThreadLocal以及各个静态类中支持线程之间传递的GetData和SetData方法都是信手拈来,那多 ...

  10. iframe页面总是提示需要重新登录怎么办

    原文链接:iframe页面二次登录问题 生产问题 问题背景 由于历史原因,公司内部系统有一些页面是基于iframe嵌入的其他系统的页面,之前一直运行正常,最近不知什么原因接连出现访问所有iframe页 ...