LOJ #3093. 「BJOI2019」光线 递推
这道题比的就是谁更细心.
令 $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; }