P3706 [SDOI2017]硬币游戏 题解

本文介绍了解决一个关于n个人抛硬币游戏问题的方法,每个人猜测一个字符串,目标是找到第iii个人获胜的概率。关键在于理解终止串和非终止串的概念,以及通过构造方程组求解概率分布。核心算法利用字符串哈希和高斯消元,时间复杂度为O(n^3)。

Description

nnn 个人,第 iii 个人给出一个长度为 mmm 的仅包含 AB 的字符串 sis_isi

扔若干次硬币,并记录下硬币落地时朝上的正反面情况。当一个人猜的序列在硬币序列中出现时,此人胜利,且扔硬币活动停止。

你需要对于每个 iii,求出第 iii 个人获胜的概率。

1≤n,m≤3001 \le n,m \le 3001n,m300sss 中的元素两两不同。

Solution

为方便叙述,做出如下约定:

  • 令字符串 TTTiii 获胜的终止串,当且仅当 sis_isiTTT 中出现的位置前于任意其他 sj(i≠j)s_j(i \neq j)sj(i=j)TTT 中出现的位置。

  • 令字符串 TTT 为非终止串,当且仅当不存在 sis_isiTTT 的子串。

若想要让第 iii 个人获胜,那么终止串必定会是一个非终止串 s0s_0s0sis_isi

但是,随意挑选一个 s0s_0s0 并在后面拼上 sis_isi,可能并不会让 iii 获胜。例如,当 s0=s_0=s0=bb 时,s1=s_1=s1=bas2=s_2=s2=ab时,虽然 bas0+s1=s_0+s_1=s0+s1=bbba 中出现,但 s2s_2s2 出现在更加靠前的位置。

何时会出现这种情况呢?不难发现,若 prei,k=sufj,kpre_{i,k}=suf_{j,k}prei,

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值