LOJ 3093: 洛谷 P5323: 「BJOI2019」光线
题目传送门:LOJ #3093。
题意简述:
有 \(n\) 面玻璃,第 \(i\) 面的透光率为 \(a\),反射率为 \(b\)。
问把这 \(n\) 面玻璃按顺序叠在一起后,\(n\) 层玻璃的透光率。
\(0 < a_i \le 1\),\(0 \le b_i < 1\)。
题解:
题目中告诉我们,\(n\) 层的玻璃也有透光率,换句话说,多层的玻璃可能可以看作一层。
从这个角度思考,考虑已经求出了前 \(i - 1\) 层玻璃的透光率,如何求出前 \(i\) 层玻璃的透光率。
可以发现已知透光率并不足以进一步求出新的透光率,我们似乎还需要知道反射率。
这时,如果你天真地认为反射率就是从第一面玻璃射入的光的反射率,你就错了。
需要特别注意的是,从第一面和最后一面射入的光的反射率是不相同的。
这是一个很大的坑点,如果注意到了这题就容易了;没注意到就会一直挠头。
总之,我们需要维护两个量:
前 \(i\) 面玻璃按顺序叠在一起后,光从第 \(1\) 面玻璃射入时的透光率。
前 \(i\) 面玻璃按顺序叠在一起后,光从第 \(i\) 面玻璃射入时的反射率。
分别记为 \(P_i\) 和 \(Q_i\),则不难推出:
\]
其中我们发现带有 \(\displaystyle\sum_{k=0}^{\infty}a^k\) 的形式,当 \(|a|<1\) 时,这个无穷级数等于 \(\displaystyle\frac{1}{1-a}\)。
所以得到最终的递推式:
\]
先算出 \(\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」光线的更多相关文章
- LOJ 3089: 洛谷 P5319: 「BJOI2019」奥术神杖
题目传送门:LOJ #3089. 题意简述: 有一个长度为 \(n\) 的母串,其中某些位置已固定,另一些位置可以任意填. 同时给定 \(m\) 个小串,第 \(i\) 个为 \(S_i\),所有位置 ...
- LOJ 3045: 洛谷 P5326: 「ZJOI2019」开关
题目传送门:LOJ #3045. 题意简述 略. 题解 从高斯消元出发好像需要一些集合幂级数的知识,就不从这个角度思考了. 令 \(\displaystyle \dot p = \sum_{i = 1 ...
- LOJ 3043: 洛谷 P5280: 「ZJOI2019」线段树
题目传送门:LOJ #3043. 题意简述: 你需要模拟线段树的懒标记过程. 初始时有一棵什么标记都没有的 \(n\) 阶线段树. 每次修改会把当前所有的线段树复制一份,然后对于这些线段树实行一次区间 ...
- LOJ 2483: 洛谷 P4655: 「CEOI2017」Building Bridges
题目传送门:LOJ #2483. 题意简述: 有 \(n\) 个数,每个数有高度 \(h_i\) 和价格 \(w_i\) 两个属性. 你可以花费 \(w_i\) 的代价移除第 \(i\) 个数(不能移 ...
- LOJ 2312(洛谷 3733) 「HAOI2017」八纵八横——线段树分治+线性基+bitset
题目:https://loj.ac/problem/2312 https://www.luogu.org/problemnew/show/P3733 原本以为要线段树分治+LCT,查了查发现环上的值直 ...
- LOJ 2249: 洛谷 P2305: 「NOI2014」购票
题目传送门:LOJ #2249. 题意简述: 有一棵以 \(1\) 号节点为根节点的带边权的树. 除了 \(1\) 号节点的所有节点上都有人需要坐车到达 \(1\) 号节点. 除了 \(1\) 号节点 ...
- Loj #3093. 「BJOI2019」光线
Loj #3093. 「BJOI2019」光线 题目描述 当一束光打到一层玻璃上时,有一定比例的光会穿过这层玻璃,一定比例的光会被反射回去,剩下的光被玻璃吸收. 设对于任意 \(x\),有 \(x\t ...
- 【LOJ】#3093. 「BJOI2019」光线
LOJ#3093. 「BJOI2019」光线 从下到上把两面镜子合成一个 新的镜子是\((\frac{a_{i}a_{i + 1}}{1 - b_{i}b_{i + 1}},b_{i} + \frac ...
- 洛谷 P4710 「物理」平抛运动
洛谷 P4710 「物理」平抛运动 洛谷传送门 题目描述 小 F 回到班上,面对自己 28 / 110 的物理,感觉非常凉凉.他准备从最基础的力学学起. 如图,一个可以视为质点的小球在点 A(x_0, ...
随机推荐
- day24 异常处理
程序一旦发生错误,就从错误的位置停下不在执行后面的内容一般可能预估但是无法处理的问题可以用异常处理进行操作异常处理后会继续执行后面的代码 try: # 写在try中的语句是一定执行的 ret = in ...
- TortoiseSVN 忽略文件 忽略已提交文件
主要以下两种情况: 1.首次提交就做好了忽略拦截:项目首次提交到svn服务器的时候,把该删的删了,然后设置忽略规则,就没问题了. 2.提交一段时间忽然想忽略拦截:经常碰到的,发现设置忽略规则后,没法生 ...
- 利用Python攻破12306的最后一道防线
各位同学大家好,我是强子,好久没跟大家带来最新的技术文章了,最近有好几个同学问我12306自动抢票能否实现,我就趁这两天有时间用Python做了个12306自动抢票的项目,在这里我来带着大家一起来看看 ...
- 关于使用vw单位适配H5项目(二)
一些比较小的H5页面,我觉得全没有必要一定要使用框架的,比如vue和react之类的,我觉得原生的js,html5也可以写好移动端. 最近刚好要赶10多个h5页面,适配移动端的,各种手机型号都要适配, ...
- 一起使用mock数据动态创建表格
在ant-design中,我们创建一个基础table会怎么实现呢? 如下代码可视,我们会自己创建一些数据,在表格中渲染出来,如下 <Card title="基础表格"> ...
- echarts图表点击事件之跳转页面和加载页面
下图显示四个条形图,点击条形图就跳转到其页面,这说明您要判断你点了那个条形图. echarts给了它点击事件 写法,我们只要模仿就行,代码如下: //echarts图表点击跳转 myChart.on( ...
- 7.14 Git 工具 - 凭证存储
凭证存储 如果你使用的是 SSH 方式连接远端,并且设置了一个没有口令的密钥,这样就可以在不输入用户名和密码的情况下安全地传输数据. 然而,这对 HTTP 协议来说是不可能的 —— 每一个连接都是需要 ...
- Hadoop基础-HDFS的API常见操作
Hadoop基础-HDFS的API常见操作 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本文主要是记录一写我在学习HDFS时的一些琐碎的学习笔记, 方便自己以后查看.在调用API ...
- 使用htpasswd实现Nginx验证访问
Nginx是一个高性能的WEB服务器,越来越多的用户使用,如果您的某个站点不希望对外公开(比如PHPMyAdmin),可以使用htpasswd实现Nginx验证访问. 安装htpasswd htpas ...
- 函数和常用模块【day04】:内置函数(十)
一.36-40 36.isinstance(object, classinfo) 功能:用于判断,对象是否是某个类的实例 # s = "alex" # 对象,"alex& ...