这道题比的就是谁更细心.
令 $f[i]$ 表示前 $i$ 面玻璃的透过率(从 $1$ 射入)
令 $g[i]$ 表示前 $i$ 面玻璃的反射率(从 $i$ 射入)
然后进行递推就行.
code:
#include <bits/stdc++.h>
#define ll long long
#define mod 1000000007
#define setIO(s) freopen(s".in","r",stdin)
using namespace std;
int n;
int qpow(int x,int y)
{
int tmp=1;
for(;y;y>>=1,x=(ll)x*x%mod)
if(y&1) tmp=(ll)tmp*x%mod;
return tmp;
}
int INV(int x) { return qpow(x,mod-2); }
int main()
{
// setIO("input");
scanf("%d",&n);
int f=1,g=0;
int cons=INV(100);
for(int i=1;i<=n;++i)
{
int a,b;
scanf("%d%d",&a,&b);
a=(ll)a*cons%mod;
b=(ll)b*cons%mod;
f=(ll)f*a%mod*INV((ll)(1-(ll)b*g%mod+mod)%mod)%mod;
g=b+(ll)a*a%mod*g%mod*INV((ll)(1-(ll)b*g%mod+mod)%mod)%mod;
}
printf("%d\n",f);
return 0;
}
原文:https://www.cnblogs.com/guangheli/p/12970318.html