柿子题/数数题汇总总结
光线
题意
有 \(n\) 层玻璃,每一个玻璃有透光率(\(a[i]\))和反射率(\(b[i]\)),斜着打入一束光,求问有多少单位的光能穿过所有 \(n\) 层玻璃。
解析
查看解析
我们先引入一个东西:**无穷等比级数求和**\[S = 1 + r + r^2 + r^3 + \dots = \sum_{k=0}^{\infty} r^k
\]
这个级数为什么等于这个值?
其中 \(|r| < 1\)(在我们的物理问题中,\(r = Q_{n-1} \cdot b_n\),因为 \(Q_{n-1} < 1\) 且 \(b_n < 1\),所以 \(|r| < 1\))。
设:
\[S = 1 + r + r^2 + r^3 + r^4 + \dots
\]
两边同时乘以 \(r\):
\[rS = r + r^2 + r^3 + r^4 + r^5 + \dots
\]
用上面的式子减去下面的式子:
\[S - rS = 1
\]
因为:
- 第一行的 \(1\) 在第二行没有对应的项
- 第一行的 \(r\) 减去第二行的 \(r\) = \(0\)
- 第一行的 \(r^2\) 减去第二行的 \(r^2\) = \(0\)
- ... 以此类推,所有后面的项都消掉了
所以:
\[S(1 - r) = 1
\]
\[S = \frac{1}{1 - r}
\]
证明结束,我们在接下来会使用到其。
我们考虑将相邻的玻璃合并成一块玻璃,设 \(p[i]\) 为前 \(i\) 层透光总量,\(q[i]\) 为第i层逆反射光(即从斜下方打入一束光,会反射多少光)量。
可以有以下推导:
\[p[i]=p[i-1]*a[i]+p[i-1]*b[i]*q[i-1]*a[i]+p[i-1]*b[i]*q[i-1]*b[i]*q[i-1]*a[i]
\]
\[=p[i-1]*a[i]*[1+q[i-1]*b[i]+(q[i-1]*b[i])^2+...]
\]
\[=p[i-1]*a[i] / (1-q[i-1]*b[i])
\]
这个原理是:射入的光线是前 \(i-1\) 块玻璃的透光总量,也就是 \(p[i-1]\)。
第一次透光是直接从第 \(i\) 玻璃下方透过,也就是 \(p[i-1]*a[i]\),后面的光线都需要先从下方反射,再从上方反射(注意此处是前 \(i-1\) 块玻璃的反射,也就是 \(q[i-1]\)),再从下方透光,以此类推。
故第 \(k\) 次透光的透光量是 \(p[i-1]*a[i]*(q[i-1]*b[i])^{k-1}\),式子就可以推出来了。
再根据我们刚才推出的无穷等比级数求和的结论,\(p\) 的式子推导就结束了。
然后我们考虑 \(q\):
\[q[i]=b[i]+a[i]*q[i-1]*a[i]+a[i]*q[i-1]*a[i]*b[i]*q[i-1]*b[i]+...
\]
\[=b[i]+a[i]^2*q[i-1]*(1+q[i-1]*b[i]+(q[i-1]*b[i])^2+...)
\]
\[=b[i]+a[i]^2*q[i-1] / (1-q[i-1]*b[i])
\]
原理是相似的,我们不再赘述。
初始化为 \(P[0]=1,q[0]=0\),本题结束。
可以自由转载

浙公网安备 33010602011771号