牛客小白月赛9-A

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);
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_40588429/article/details/84196833