NC22526. 流星雨
描述
输入描述
第一行三个整数,n,a,b,其中n为天数,第二行n个整数。接下来n行,每行两个整数,x,y,第i+2行表示第i天有流星雨的概率。
输出描述
一行一个整数,为答案对 取模的结果。
即设答案化为最简分式后的形式为,其中a和b互质。输出整数 x 使得且。可以证明这样的整数x是唯一的。
示例1
输入:
2 1 3 1 1 1 2 1 2
输出:
166666669
说明:
示例2
输入:
3 1 5 1 1 2 1 2 1 4 2 3
输出:
763333341
C++14(g++5.4) 解法, 执行用时: 53ms, 内存消耗: 2784K, 提交时间: 2019-02-09 21:57:19
#include<bits/stdc++.h> #define ll long long using namespace std; const int _=1e5+25,yl=1e9+7; ll f[_],P,p[_],w[_],ans,n,x,y; ll POW(ll x,ll y){ ll res=1; while(y){ if(y&1)res=res*x%yl; x=x*x%yl;y>>=1; } return res; } int main(){ ios::sync_with_stdio(false); cin>>n>>x>>y; P=x*POW(y,yl-2)%yl; for(int i=1;i<=n;++i)cin>>w[i]; for(int i=1;i<=n;++i)cin>>x>>y,p[i]=x*POW(y,yl-2)%yl; for(int i=1;i<=n;++i){ f[i]=(p[i]+P*f[i-1])%yl; ans+=f[i]*w[i]%yl; } cout<<ans%yl<<endl; }
C++11(clang++ 3.9) 解法, 执行用时: 74ms, 内存消耗: 2924K, 提交时间: 2019-02-08 19:36:09
#include<bits/stdc++.h> #define ll long long using namespace std; const int _=1e5+25,yl=1e9+7; ll f[_],P,p[_],w[_],ans,n,x,y; ll POW(ll x,ll y){ ll res=1; while(y){ if(y&1)res=res*x%yl; x=x*x%yl;y>>=1; } return res; } int main(){ ios::sync_with_stdio(false); cin>>n>>x>>y; P=x*POW(y,yl-2)%yl; for(int i=1;i<=n;++i)cin>>w[i]; for(int i=1;i<=n;++i)cin>>x>>y,p[i]=x*POW(y,yl-2)%yl; for(int i=1;i<=n;++i){ f[i]=(p[i]+P*f[i-1])%yl; ans+=f[i]*w[i]%yl; } cout<<ans%yl<<endl; }