题目传送门:LOJ #3093

题意简述:

有 \(n\) 面玻璃,第 \(i\) 面的透光率为 \(a\),反射率为 \(b\)。

问把这 \(n\) 面玻璃按顺序叠在一起后,\(n\) 层玻璃的透光率。

\(0 < a_i \le 1\),\(0 \le b_i < 1\)。

题解:

题目中告诉我们,\(n\) 层的玻璃也有透光率,换句话说,多层的玻璃可能可以看作一层。

从这个角度思考,考虑已经求出了前 \(i - 1\) 层玻璃的透光率,如何求出前 \(i\) 层玻璃的透光率。

可以发现已知透光率并不足以进一步求出新的透光率,我们似乎还需要知道反射率。

这时,如果你天真地认为反射率就是从第一面玻璃射入的光的反射率,你就错了。

需要特别注意的是,从第一面和最后一面射入的光的反射率是不相同的。

这是一个很大的坑点,如果注意到了这题就容易了;没注意到就会一直挠头。

总之,我们需要维护两个量:

  1. 前 \(i\) 面玻璃按顺序叠在一起后,光从第 \(1\) 面玻璃射入时的透光率。

  2. 前 \(i\) 面玻璃按顺序叠在一起后,光从第 \(i\) 面玻璃射入时的反射率。

分别记为 \(P_i\) 和 \(Q_i\),则不难推出:

\[\begin{aligned}P_i&=P_{i-1}a_i\sum_{k=0}^{\infty}(Q_{i-1}b_i)^k\\Q_i&=b_i+Q_{i-1}a_i^2\sum_{k=0}^{\infty}(Q_{i-1}b_i)^k\end{aligned}
\]

其中我们发现带有 \(\displaystyle\sum_{k=0}^{\infty}a^k\) 的形式,当 \(|a|<1\) 时,这个无穷级数等于 \(\displaystyle\frac{1}{1-a}\)。

所以得到最终的递推式:

\[\begin{aligned}P_i&=\frac{P_{i-1}a_i}{1-Q_{i-1}b_i}\\Q_i&=b_i+\frac{Q_{i-1}a_i^2}{1-Q_{i-1}b_i}\end{aligned}
\]

先算出 \(\displaystyle\frac{1}{1-Q_{i-1}b_i}\) 可以简化计算。

代码如下:

#include <cstdio>

typedef long long LL;
const int Mod = 1000000007;
const int Inv100 = 570000004; inline LL Inv(LL b) {
LL a = 1;
for (int e = Mod - 2; e; e >>= 1, b = b * b % Mod)
if (e & 1) a = a * b % Mod;
return a;
} int N;
LL P, Q; int main() {
scanf("%d", &N);
P = 1, Q = 0;
while (N--) {
LL a, b;
scanf("%lld%lld", &a, &b);
a = a * Inv100 % Mod, b = b * Inv100 % Mod;
LL W = Inv((1 - Q * b % Mod + Mod) % Mod);
Q = (b + a * a % Mod * Q % Mod * W) % Mod;
P = P * a % Mod * W % Mod;
}
printf("%lld\n", P);
return 0;
}

题外话:你或许会想,既然反射率不同,透光率是否也不同呢?

然而经过计算,可以得到在每面玻璃两侧的透光率分别相同的情况下,最终两侧的透光率也相同。

这引出了一个有趣的光学原理:可以通过叠加不同的普通玻璃创造出两侧反射率不同的复合玻璃,但是透光率却始终相同。

同时也说明了毛玻璃并不是普通玻璃组合而成的。

LOJ 3093: 洛谷 P5323: 「BJOI2019」光线的更多相关文章

  1. LOJ 3089: 洛谷 P5319: 「BJOI2019」奥术神杖

    题目传送门:LOJ #3089. 题意简述: 有一个长度为 \(n\) 的母串,其中某些位置已固定,另一些位置可以任意填. 同时给定 \(m\) 个小串,第 \(i\) 个为 \(S_i\),所有位置 ...

  2. LOJ 3045: 洛谷 P5326: 「ZJOI2019」开关

    题目传送门:LOJ #3045. 题意简述 略. 题解 从高斯消元出发好像需要一些集合幂级数的知识,就不从这个角度思考了. 令 \(\displaystyle \dot p = \sum_{i = 1 ...

  3. LOJ 3043: 洛谷 P5280: 「ZJOI2019」线段树

    题目传送门:LOJ #3043. 题意简述: 你需要模拟线段树的懒标记过程. 初始时有一棵什么标记都没有的 \(n\) 阶线段树. 每次修改会把当前所有的线段树复制一份,然后对于这些线段树实行一次区间 ...

  4. LOJ 2483: 洛谷 P4655: 「CEOI2017」Building Bridges

    题目传送门:LOJ #2483. 题意简述: 有 \(n\) 个数,每个数有高度 \(h_i\) 和价格 \(w_i\) 两个属性. 你可以花费 \(w_i\) 的代价移除第 \(i\) 个数(不能移 ...

  5. LOJ 2312(洛谷 3733) 「HAOI2017」八纵八横——线段树分治+线性基+bitset

    题目:https://loj.ac/problem/2312 https://www.luogu.org/problemnew/show/P3733 原本以为要线段树分治+LCT,查了查发现环上的值直 ...

  6. LOJ 2249: 洛谷 P2305: 「NOI2014」购票

    题目传送门:LOJ #2249. 题意简述: 有一棵以 \(1\) 号节点为根节点的带边权的树. 除了 \(1\) 号节点的所有节点上都有人需要坐车到达 \(1\) 号节点. 除了 \(1\) 号节点 ...

  7. Loj #3093. 「BJOI2019」光线

    Loj #3093. 「BJOI2019」光线 题目描述 当一束光打到一层玻璃上时,有一定比例的光会穿过这层玻璃,一定比例的光会被反射回去,剩下的光被玻璃吸收. 设对于任意 \(x\),有 \(x\t ...

  8. 【LOJ】#3093. 「BJOI2019」光线

    LOJ#3093. 「BJOI2019」光线 从下到上把两面镜子合成一个 新的镜子是\((\frac{a_{i}a_{i + 1}}{1 - b_{i}b_{i + 1}},b_{i} + \frac ...

  9. 洛谷 P4710 「物理」平抛运动

    洛谷 P4710 「物理」平抛运动 洛谷传送门 题目描述 小 F 回到班上,面对自己 28 / 110 的物理,感觉非常凉凉.他准备从最基础的力学学起. 如图,一个可以视为质点的小球在点 A(x_0, ...

随机推荐

  1. MT【59】一道迭代函数作图

    [Read a good book, that is conversation with many a noble man.]---勒内·笛卡尔(1596-1650) 解答: 评:也可以把f(f(x) ...

  2. BZOJ 2159: Crash 的文明世界(树形dp+第二类斯特林数+组合数)

    题意 给定一棵 \(n\) 个点的树和一个常数 \(k\) , 对于每个 \(i\) , 求 \[\displaystyle S(i) = \sum _{j=1} ^ {n} \mathrm{dist ...

  3. 小强学Python+OpenCV之-1.3绘图

    目标 今天的课程比较轻松,我们来学习一下OpenCV中几个绘图函数: cv2.line cv2.rectangle cv2.circle 画直线 直接经过前面两节的内容.我想直接上代码应该是可以接受的 ...

  4. 自学Zabbix4.2.1 Application介绍

    自学Zabbix4.2.1 Application介绍 Applications应用程序是item的一个组.例如我们要监控MySQL,我们可以将所有和MySQL相关的item放到这个应用程序中.例如M ...

  5. 【LOJ#572】Misaka Network 与求和(莫比乌斯反演,杜教筛,min_25筛)

    [LOJ#572]Misaka Network 与求和(莫比乌斯反演,杜教筛,min_25筛) 题面 LOJ \[ans=\sum_{i=1}^n\sum_{j=1}^n f(gcd(i,j))^k\ ...

  6. 省选模拟赛第四轮 B——O(n^4)->O(n^3)->O(n^2)

    一 稍微转化一下,就是找所有和原树差距不超过k的不同构树的个数 一个挺trick的想法是: 由于矩阵树定理的行列式的值是把邻接矩阵数值看做边权的图的所有生成树的边权乘积之和 那么如果把不存在于原树中的 ...

  7. 【洛谷P3792】由乃与大母神原型和偶像崇拜

    题目大意:维护一个序列,支持单点修改和查询一段区间能不能组成连续的一段数. 题解:查询区间能不能组成一段连续的数这个操作较为复杂,很难在较小时间复杂度内直接维护.这里采用线段树维护区间哈希的策略,即: ...

  8. MySQL的1067错误解决方法

    今天在学校的时候MySQL还运行的好好的,关机来公司后MySQL一直报错,错误为1067,网上找了好多办法,但是大都没效果,因此对这个错误做个总结: 打开你的安装目录下,查看my.ini文件中MySQ ...

  9. JAVA过滤器的使用(Filter)

    request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf ...

  10. oi程序提交注意:bool

    比如我一个程序用了bool类型(#include<stdbool.h>) 在poj以c的方式提交不通过显示Compile Error,而用gcc的方式提交通过了, 也许其它的#includ ...