题库练习 「BJOI2018」治疗之雨
← 上一题 下一题 →

A6071 | 「BJOI2018」治疗之雨

时间限制2s
内存限制512MB
通过 / 提交0/0

题目描述

(没玩过《炉石传说》的人可以跳过这一段)今天我们来探讨下《炉石传说》中“治疗之雨”(恢复 $12$ 点生命值,随机分配到所有友方角色上)和“暗影打击装甲”(每当一个角色获得治疗,便对随机敌人造成 $1$ 点伤害)这两张卡牌之间的互动效果。假设你场上有 $m$ 个剩余生命值无限大且生命值上限减去剩余生命值也无限大的随从,而对方的场上有 $k$ 个暗影打击装甲,你的英雄剩余生命值为 $p$ 、生命值上限为 $n$ ,现在你使用了一张可以恢复无限多(而不是 $12$ 点)生命值的治疗之雨,问治疗之雨期望总共恢复了几点生命值以后你的英雄会死亡(生命值降为 $0$ ;治疗之雨的判定机制使得在此后再也不会为英雄恢复生命值)。

注:题目背景与题目描述有冲突的地方请以题目描述为准

下面让我们再形式化地描述一遍问题。

你现在有 $m+1$ 个数:第一个为 $p$ ,最小值为 $0$ ,最大值为 $n$ ;剩下 $m$ 个都是无穷,没有最小值或最大值。你可以进行任意多轮操作,每轮操作如下:

在不为最大值的数中等概率随机选择一个(如果没有则不操作),把它加一;

进行 $k$ 次这个步骤:在不为最小值的数中等概率随机选择一个(如果没有则不操作),把它减一。

现在问期望进行多少轮操作以后第一个数会变为最小值 $0$ 。

输入格式

输入包含多组数据。

输入第一行包含一个正整数 $T$ ,表示数据组数。

接下来 $T$ 行 ,每行 $4$ 个非负整数 $n$ 、$p$ 、$m$ 、$k$ (含义见题目描述),表示一次询问。

输出格式

输出 $T$ 行,每行一个整数,表示一次询问的答案。

如果无论进行多少轮操作,第一个数都不会变为最小值 $0$ ,那么输出``-1``;

否则,可以证明答案一定为有理数,那么请输出答案模 $1000000007$ 的余数,即设答案为 $\frac{a}{b}$($a$ 、$b$ 为互质的正整数 ),你输出的整数为 $x$ ,那么你需要保证 $0 \leq x < 1000000007$ 且 $a \equiv bx \bmod\ 1000000007$ 。

输入输出样例

输入 #1
2
2 1 1 1
2 2 1 1
输出 #1
6
8
C++ 编辑器
输入
输出