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

显然我们只关注每个串前三个棋子和后三个棋子,并且根据题目的特性,我们可以将任意的三个字符看作点,将一个字符串看作连接两个点的边,这样我们得到了一张点数为 \(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. bugku的一道代码审计基础题:eval

    首先看到 include "flag.php",第一反应就应该是文件包含 直接先?hello=file:////etc, 然后啥也没 那就再检查一下代码,eval(var_dump ...

  2. 离线版centos8安装docker笔记

    嗨嗨哈哈,已经很久没有坐下来胡编乱造一点笔记了,平时云服务器搞惯了,一个命令就安装好了docker了的,但这次生不逢时的新机房就没那么幸运了,有多不逢时超乎想象,不仅仅服务器没有外网,就连周围方圆一公 ...

  3. WPF自定义界面WindowChrome

    WPF自定义界面WindowChrome 默认WPF的界面其实也还行,就是满足不了日渐增长的需求,界面还是需要有更高的自定义程度,包括标题栏也要能够塞下更多的操作控件. 默认窗口介绍 新建WPF项目, ...

  4. Attention Is All You Need

    目录 概 主要内容 Positional Encoding auto_regressive 额外的细节 代码 Vaswani A., Shazeer N., Parmar N., Uszkoreit ...

  5. [c++]对vector<T>容器求交集,并集,去重

    #include "iostream" #include "vector" #include "algorithm" //sort函数.交并 ...

  6. 编写Java程序_输入一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。

    要求: 输入一个5位数,判断它是不是回文数.即12321是回文数,个位与万位相同,十位与千位相同. 实现代码: package kaoshi; import java.util.Scanner; pu ...

  7. 中文字体css编码转换

    各大网站的字体选择 网站 字体 腾讯 font: 12px "宋体","Arial Narrow",HELVETICA; 淘宝 font: 12px/1.5 t ...

  8. Python_列表比较大小

    比较原理 从第一个元素顺序开始比较,如果相等,则继续,返回第一个不相等元素得比较结果.如果所有元素比较均相等,则长的列表大,一样长则两列表相等. 示例 a = [5, 6, 3] b = [5, 4, ...

  9. quasar框架在store中使用router跳转页面报错

    网上一通百度,终于在这篇博客中找到原因.  https://www.cnblogs.com/remly/p/12995936.html 原因是: 在router中导出了一个工厂函数, 既然是一个函数, ...

  10. Eclipse配置Maven3.5

    原文: https://www.toutiao.com/i6494558327622599181/ 配置Maven 首先保证Java环境是有的(Maven 3.1以上 要求 JDK 1.6 或以上版本 ...