Problem
「清华集训2017」小Y和恐怖的奴隶主
时间限制:
内存限制:
题目描述
"A fight? Count me in!"
要打架了,算我一个。"Everyone, get in here!"
所有人,都过来!
是一个喜欢玩游戏的。一天,她正在玩一款游戏,要打一个。
虽然这个有点生命值,但它只带了一个随从――一个只有点生命值的“恐怖的奴隶主”。
这个“恐怖的奴隶主”有一个特殊的技能:每当它被扣减生命值但没有死亡(死亡即),且的随从数量小于上限,便会召唤一个新的具有点生命值的“恐怖的奴隶主”。
现在可以进行次攻击,每次攻击时,会从以及的所有随从中的等概率随机选择一个,并扣减点生命值,她想知道进行次攻击后扣减的生命值点数的期望。为了避免精度误差,你的答案需要对取模。
输入格式
输入第一行包含三个正整数,表示询问组数,的含义见题目描述。
接下来行,每行包含一个正整数,表示询问进行次攻击后扣减的生命值点数的期望。
输出格式
输出共行,对于每个询问输出一行一个非负整数,表示该询问的答案对取模的结果。
可以证明,所求期望一定是一个有理数,设其为(),那么你输出的数要满足。
样例
输入
1 | 3 2 6 |
输出
1 | 499122177 |
解释
对于第一次询问,第一次攻击有的概率扣减的生命值,有的概率扣减随从的生命值,所以答案为。。
对于第二次询问,如果第一次攻击扣减了的生命值,那么有的概率第二次攻击仍扣减的生命值,有的概率第二次攻击扣减随从的生命值;如果第一次攻击扣减了随从的生命值,那么现在又新召唤了一个随从(“恐怖的奴隶主”),于是有的概率第二次攻击扣减的生命值,有的概率第二次攻击扣减随从的生命值。所以答案为。。
数据范围与提示
在所有测试点中,,,,
各个测试点的分值和数据范围如下:
测试点编号 | 分值 | ||||
---|---|---|---|---|---|
标签:概率DP
矩阵快速幂
Solution
这道题是BZOJ4832【Lydsy1704月赛】抵制克苏恩的加强版。与其相似,需要概率转移,因为很大而需要用矩阵快速幂优化。
考虑如何构造转移矩阵。转移矩阵相当于记录一个状态转移成另一个状态的概率。记状态表示血量为的奴隶主各有个的状态,则和弱化版相同,枚举打哪种奴隶主进行转移即可。然而有一种情况无法转移,即打脸的情况(对应)。我们只需要给转移矩阵多开一行,存储即可。对应地,答案矩阵也需要多开一行,开始时这一行的数为。
注意:卡常!需要先预处理转移矩阵的到次方,这样每次询问不用重新算。
Code
1 |
|