https://ac.nowcoder.com/acm/contest/275/A
你在一栋楼房下面,楼房一共有n层,第i层每秒有pi的概率会扔下一个东西并砸到你
求第一秒内你被砸到的概率
第一行一个整数n
之后有n行,第i+1行有两个整数ai,bi,表示pi=ai/bi
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1e5 + 10;
const int mod = 1e9 + 7;
ll qpow(ll x, ll y)
{
ll ans = 1;
while(y)
{
if(y & 1)
ans = ans * x % mod;
y >>= 1;
x = x * x % mod;
}
return ans;
}
int main()
{
int n, a, b;
scanf("%d", &n);
register int i;
if(n == 0) printf("0\n");
else if(n == 1)
{
scanf("%d%d", &a, &b);
printf("%lld\n", a * qpow(b, mod - 2) % mod);
}
else
{
ll asum = 1, bsum = 1;
for(i = 0; i < n; i++)
{
scanf("%d%d", &a, &b);
bsum = bsum * b % mod;
asum = asum * (b - a) % mod;
}
asum = (bsum - asum + mod) % mod;
if(bsum < asum)
bsum += mod;
printf("%lld\n", asum * qpow(bsum, mod - 2) % mod);
}
}