牛客小白賽-簽到
阿新 • • 發佈:2018-12-22
你在一棟樓房下面,樓房一共有n層,第i層每秒有pi的概率會扔下一個東西並砸到你
求第一秒內你被砸到的概率
輸入描述:
第一行一個整數n 之後有n行,第i+1行有兩個整數ai,bi,表示
輸出描述:
設答案為,你只需要找到一個最小的非負整數T,使得 輸出這個T就行了
示例1
輸入
2 1 2 1 2
輸出
750000006
說明
一共只有如下狀態: 1. 第一層和第二層都扔了下來 2. 第一層扔了下來 3. 第二層扔了下來 4. 第一層和第二層都沒有扔下來 以上四種都是等概率發生的 除了第四種情況外,都會被砸到 因此被砸到的概率是 3/4,這個值在模1e9+7意義下就是750000006
備註:
資料範圍 0 ≤ n ≤ 105 1 ≤ ai ≤ bi ≤ 105
#include<bits/stdc++.h> using namespace std; #define ll long long const ll mod=1e9+7; ll qpow(ll a,ll b){ ll ans=1; while(b){ if(b&1){ ans=a*ans%mod; } a=a*a%mod; b/=2; } return ans; } int main(){ int n; cin>>n; int ans=1; while(n--){ int x,y; cin>>x>>y; x=y-x; ans=(ans*(x*(qpow(y,mod-2))%mod)%mod)%mod; } cout<<(1-ans+mod)%mod<<endl; }
n = int(input())
ans = 1
mod = int(1e9+7)
for i in range(n):
a,b = map(int,input().split(' '))
ans *= (b-a)*pow(b,mod-2,mod)
print((1-ans)%mod)