Luogu5326 [ZJOI2019] 开关

题意:有 个开关,每个开关有 两种状态,初始状态为

对某个开关进行操作可以使得其状态改变,由 变为 或由 变为

每个开关都有目标状态,记 为第 个开关的目标状态,当所有开关都达到目标状态,任务达成。

操作按照一定规则随机,具体地,第 个开关有权值 ,随机到的概率即为

求按上述规则随机操作时,完成任务所需的期望操作次数。

答案对 取模,,时限


题目中“一达成目标就停止”的要求是经典的,考虑 PGF。

为在 次操作后达成目标的概率,对应的概率生成函数为

为在 次操作后回到原状态的概率,对应的概率生成函数为

为在 次操作后第一次达成目标的概率,对应的概率生成函数为

只有 才是一个标准的 PGF,满足 ,而 也正是答案。

根据 xor 的良好性质,对于一种在第 步达成目标的情况,肯定是之前某处(或这一步)已经达成过,然后经过若干步又回到达成状态,故

于是,我们只需设法得到

将我们每一轮按下的开关写成一个序列,称作“操作序列”。

表示操作序列中 出现的次数,当 时,开关 此时在目标状态。

于是,对开关 构造 EGF

计算 即为在 次操作后达成目标的概率。

为用 次操作回到原状态的概率,等价于所有 时的

不难写出

但此处是 EGF,需要转化为 OGF。考虑将 作为基本单位,最后将其线性组合转化为 OGF。(类似于对 OGF 的分式分解)

具体地, 被转化为 ,它们对应的数列都是

将某 EGF 表示为 的形式,其中 是系数。

由于本题的特殊性, 均可以这样表示,且 的值只有较少的 个。

暴力卷积即可 地求出 的表示,即

然后将其转为系数对应的 OGF。

于是我们只需求出

的系数是等比数列 ,其系数和即为

但这只在 时成立,我们的表示中存在着不收敛的 项,故要预先乘以 以避免这种情况。

于是我们只需求出

显然有

的系数对应数列 ,系数和为

由此不难求出