Topcoder12984 TorusSailing

考虑矩阵的最后一行和最右一列,我们把所有方格的期望表示为这个变量的方程。

然后考虑矩阵的第一行和最左一列,发现可以联立这些方程与最后一行、最右一列的方程。

这样就可以高斯消元了。消完了再带回去即可求出期望。

时间复杂度

代码

HDU4035 Maze

表示结点的期望,那么

我们尝试将表示成的形式,其中的父节点。首先设

那么把上式化简可以得到

对于根结点的情况:

实现的时候注意判无解即可。注意,本题精度要开到

代码

SHOI2017 分手是祝愿

考虑按灯泡的最优策略。我们显然是先找到最大的 1 把它变成 0,然后再找最大的 1 变成 0……

因此设表示把一个最优按次能全 0 的局面变成按次能全 0 的局面的期望步数。显然,当时你会选最优,即;否则,你有的概率按到一个应该按的灯,剩余的概率则会转移到。因此得到

边界情况是因为你不论按哪个,都能按到你应该按的那个灯。

于是我们先求出初始局面在最优情况下需要按的次数,假设为。那么答案为

时间复杂度

代码

歌唱王国

个字符集是的长度分明为的字符串(模式串)。有次询问,第次询问为:生成一个字符串,每次随机在末尾添加一个字符,一旦中出现了就停止生成。求长度的期望。

概率生成函数

固定

第一部分

表示长度为时恰好结束的概率,表示长度为时没有结束的概率。

显然,对于,有

严谨定义补充

严谨地说,表示随机生成长度为的串,仅做为后缀出现且仅出现一次的概率。

表示随机生成长度为的串,未出现的概率。

首先根据定义有。即在的长度还没有结束,那么可能会在或者大于的长度结束。

特殊地,当时,

对于串,我们记录表示是否匹配(即是否是 border)。那么我在长度为的状态下直接加入这个串,显然一定会结束。但是,我们还可能会在长度小于的时候结束(即当我补完一个 border 的时候就结束了)。那么可以得到

解释一下上式的含义:

  • 左边:随机生成长度为的串满足中没有的概率。

  • 右边:对求概率和:随机生成长度为的串满足恰好以结尾且的概率。

两者都等价于:在长度属于这个区间结束的概率。

整理一下得到

第二部分

接下来我们用概率生成函数来改写上式。

概率生成函数

离散随机变量的概率生成函数为

该函数有两个重要的性质:

概率生成函数是普通生成函数的一种特殊情况(被赋予特殊的意义)。

。我们要求的就是

于是我们可以把定义式改写为

对两边求导得到

因此

另一种理解方式

对于离散变量,我们知道

可以理解为长度的概率。因此要求的期望等价于

改写为

注意,对于,因此不会出现负指数项。令可以得到

因为,因此得到

这样就做完了。

代码

硬币游戏

给出个长度为的互不相同的 01 串。现在生成一个字符串,每次在末尾随机加入一个字符。一旦中出现某个就停止。对每个求以结尾的概率。

概率生成函数 高斯消元 SDOI

,其中表示长度为结尾结束的概率。

,其中表示长度为仍未结束的概率。

我们要求的是

类似地,首先有一个显然的等式:

类似地,设表示是否匹配。那么我们强行在当前状态下插入,可以得到

相当于你在插入的过程中,可能在中途就以结尾结束了。

根据第一个等式,取得到

第二个等式取得到

那么对于再加上上面那个式子,我们可以高斯消元求出答案了。

注:eps 要开到

代码

随机游走

给定一棵个结点的树,你从点出发,每次等概率随机选择一条与所在点相邻的边走过去。

次询问,每次询问给定一个集合,求如果从出发一直随机游走,直到点集中所有点都至少经过一次,期望游走几步。

特别地,点(即起点)视为一开始就被经过了一次。

答案对取模。

FMT 容斥 min-max 容斥 PKUWC

首先考虑 min-max 容斥。

min-max 容斥

对于全序集合,有

表示走到的时间的期望。那么我们要求的是,转化为求,即到达任意一个点的时间的期望。

这个可以用树上消元在的复杂度计算,答案就是根结点的期望。

最后容斥的时候可以使用 FMT,把容斥系数带进去即可。

总时间复杂度

代码

Circles of Waiting

主元法:对于一类消元问题,可以先将变量用一组主元表示,然后将这些变量的方程与主元联立求解,以降低复杂度。

对于这道题,我们可以把圆上左边界的点作为主元,具体来说是圆内每行 x 坐标最小的点。那么根据期望方程

我们可以得到的方程式。这样就可以从左边推到右边界。由于右边界之外的点期望是 0,就可以列出个方程。于是高斯消元即可。时间复杂度

Graph Game

考虑一棵树的情况。如果在某个时刻我们删掉的时候仍与连通,那么就会产生 1 的贡献。我们考虑这件事发生的概率。容易发现概率是 A,B 路径长度的倒数(确切地说,这里的长度是指点数)。因此把所有有向路径长度的倒数求和就是答案。

如果是基环树,那么从 A 到 B 就可能会出现两条路径(即中间夹一个环)。那么有两条路径,如果我们直接把贡献算成两条路径长度倒数和的话,会多算贡献。那么减掉路径并的长度倒数即可。

证明见官题。

Bingo

权值是 2 的幂,相当于子集枚举,可以理解其组合意义为每行每列被选择包含的概率的和。因此得到

Slime and Biscuits

给出一个长度为的序列,设。每次有的概率选择,然后等概率选择中一个不等于的数,然后令减一,加一。当存在某个时停止操作。问期望时间。

概率 期望 消元

容易想到,设表示,在时结束的期望。答案就是。但是要注意,这不是普通意义上的期望。

普通意义的期望例如丢骰子,丢到的期望时间。那么你丢无限次,丢到的概率是无限趋近于的。也就是说不论哪个局面都可以通过继续丢骰子来丢出

但是在题目中的游戏的条件下,一旦有某个使得,那么游戏就结束了。这种情况对的贡献显然是(因为不是在处结束的)。但是它的时间(随机变量)却不一定是。是在这个条件下我们强制它的贡献是,这个规则是不符合普通期望的定义的。

换言之,其实是一个不完全期望——它只包含所有合法情况的概率乘随机变量值(时间)的和(对于普通的期望,所有的情况最后一定可以导出合法情况)。

理解了这个,我们再重新审视本题。

直接计算是困难的,因为我们要求在游戏过程中不能存在某个使得。那么我们考虑减去不合法的情况。

表示仅当时结束游戏时的期望时间。也就是说我们修改了游戏的规则。

这其中就有不合法的情况,比如先有出现,然后再把上的转移到上。

因此我们设表示在原来的游戏规则下,游戏在处结束的概率。显然有

表示在修改了游戏的规则的状态下,从转移到的期望时间。显然这对于所有的都是相等的。

那么我们把不合法的情况减掉,建立等式:

是不用乘的,因为它计算的是不完全期望,概率已经算在里面了)

那么移项变换一下得到

这个是关于的等式。我们把所有关于的等式累加,得到

那么只要我们能求出,就可以求出答案。

而在修改了游戏的规则的状态下,我们只关心的值。其他的值满了也没关系。因此设表示的值当前为,从变成的期望时间。那么

  • 的概率选中自己,那么就会变成
  • 否则有的概率选中别的数,那么:
    • 的概率选中自己,变成
    • 否则不变。

因此就得到了

解得

是可以直接求的。那么显然有。然后

时间复杂度