柿子题/数数题汇总总结

光线

题意

\(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\),本题结束。

posted @ 2026-07-15 15:42  MistyPost  阅读(5)  评论(0)    收藏  举报