Description
有 nnn 个人,第 iii 个人给出一个长度为 mmm 的仅包含 A 和 B 的字符串 sis_isi。
扔若干次硬币,并记录下硬币落地时朝上的正反面情况。当一个人猜的序列在硬币序列中出现时,此人胜利,且扔硬币活动停止。
你需要对于每个 iii,求出第 iii 个人获胜的概率。
1≤n,m≤3001 \le n,m \le 3001≤n,m≤300,sss 中的元素两两不同。
Solution
为方便叙述,做出如下约定:
-
令字符串 TTT 为 iii 获胜的终止串,当且仅当 sis_isi 在 TTT 中出现的位置前于任意其他 sj(i≠j)s_j(i \neq j)sj(i=j) 在 TTT 中出现的位置。
-
令字符串 TTT 为非终止串,当且仅当不存在 sis_isi 是 TTT 的子串。
若想要让第 iii 个人获胜,那么终止串必定会是一个非终止串 s0s_0s0 加 sis_isi。
但是,随意挑选一个 s0s_0s0 并在后面拼上 sis_isi,可能并不会让 iii 获胜。例如,当 s0=s_0=s0=bb 时,s1=s_1=s1=ba,s2=s_2=s2=ab时,虽然 ba 在 s0+s1=s_0+s_1=s0+s1=bbba 中出现,但 s2s_2s2 出现在更加靠前的位置。
何时会出现这种情况呢?不难发现,若 prei,k=sufj,kpre_{i,k}=suf_{j,k}prei,

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

被折叠的 条评论
为什么被折叠?



