扫雷
题目描述
小A最近迷上了扫雷。 小A玩的扫雷游戏规则是这样的: 个地雷排成一排,必须从 到 依次扫过。扫一个雷需要花费 秒 的时间,如果成功排除当前雷,则可以排除下一个雷;否则的话地雷就会引爆,游戏失败,还需要从头开始重新扫雷。扫完第 个雷后才会胜利,游戏结束。 因为小A太弱了,他并不会推断每个位置的雷,只能凭运气去扫雷,所以对于第 个雷,他有 的概率能排除成功,否则雷就会爆炸,要重新开始。 现在小A想知道作为非酋,他游戏胜利的期望用时是多少,你能帮帮可怜的他吗?
输入描述
第一行一个整数 ,表示雷的个数。接下来 行每行两个正整数 ,,意义如上所述。
输出描述
输出一行一个数表示小A游戏胜利的期望用时,答案对 取模。
样例
输入
3
1 2
1 2
1 2
输出
14
数据范围
。
题解
思路
考虑递推。
设 为成功扫完 个雷的期望时间,,
则 。
时间复杂度
。
C++ 代码
#include <iostream>
using namespace std;
const int N = 1000010, mod = 1e9+7;
#define LL long long
LL qpow(LL a, LL b, LL p){
LL res = 1;
while (b)
{
if (b & 1) res = res * a % p;
b >>= 1;
a = a * a % p;
}
return res % p;
}
int main(){
LL n, res = 0;
cin >> n;
while (n -- )
{
LL a, b;
cin >> a >> b;
res = (res + 1) * b % mod * qpow(a, mod - 2, mod) % mod;
}
cout << res << endl;
return 0;
}