题目大意:有一束光线要依次穿过$n$块玻璃。

第i块玻璃的透射率为$a_i$,反射率为$b_i$。

问你有多少光能最终穿过所有玻璃。

数据范围:$n≤5\times 10^5$,答案对$998244353$取模。

我们考虑暴力把前$i-1$块玻璃看做一块玻璃,我们计算出了这块玻璃的透射率为$a$,反射率为$b$。

假设当前射过来的光线为$x$,第$i$块玻璃的透射率为$A$,反射率为$B$。

我们考虑强行打表:

第一次穿过玻璃i的光线量为$Ax$。

第二次为$ABbx$

第三次为$AB^2b^2x$

.....

以此类推。

考虑到$Bb$是小于$1$的,根据等比数列求和公式,最终能穿过玻璃$i$的光线总量为:

$X=xA\times\dfrac{Bb}{1-Bb}$

我们考虑如何更新$a$和$b$。

我们按照上面强行打表的方式打一个表,发现:

$newa=Aa\times\dfrac{Bb}{1-Bb}$

$newb=B+A^2b \times\dfrac{Bb}{1-Bb}$

直接处理就行了,复杂度$O(n\log MOD)$

 #include<bits/stdc++.h>
#define L long long
#define MOD 1000000007
#define I(x) pow_mod(x,MOD-2)
using namespace std;
L pow_mod(L x,L k){L ans=;for(;k;k>>=,x=x*x%MOD) if(k&) ans=ans*x%MOD; return ans;} int main(){
L a=,b=,x=,I100=I();
int n; cin>>n;
while(n--){
L A,B; scanf("%lld%lld",&A,&B);
A=A*I100%MOD; B=B*I100%MOD;
L Bb=B*b%MOD;
Bb=I(-Bb+MOD)%MOD;
x=x*A%MOD*Bb%MOD;
L newa=A*a%MOD*Bb%MOD;
L newb=(B+A*A%MOD*b%MOD*Bb)%MOD;
a=newa; b=newb;
}
cout<<x<<endl;
}

【BJOI2019】光线 模拟的更多相关文章

  1. [BJOI2019]光线(递推)

    [BJOI2019]光线(递推) 题面 洛谷 题解 假装玻璃可以合并,假设前面若干玻璃的透光率是\(A\),从最底下射进去的反光率是\(B\),当前的玻璃的透光率和反光率是\(a,b\). 那么可以得 ...

  2. [BJOI2019]光线——递推

    题目链接: [BJOI2019]光线 设$F_{i}$表示从第$1$面玻璃上面向下射入一单位光线,穿过前$i$面玻璃的透光率. 设$G_{i}$表示从第$i$面玻璃下面向上射入一单位光线,穿过前$i$ ...

  3. [BJOI2019]光线[递推]

    题意 题目链接 分析 令 \(f_i\) 表示光线第一次从第一块玻璃射出第 \(i\) 块玻璃的比率. 令 \(g_i\) 表示光线射回第 \(i\) 块玻璃,再射出第 \(i\) 块玻璃的比率. 容 ...

  4. luogu P5323 [BJOI2019]光线

    传送门 先考虑\(n=1\)的情况不是输入数据都告诉你了吗 然后考虑\(n=2\),可以光线是在弹来弹去的废话,然后射出去的光线是个等比数列求和的形式,也就是\(x_1\sum_{i=1}^{\inf ...

  5. [BJOI2019] 光线

    看起来很麻烦,做起来并不难的题 以下设:$a_i=\frac{a_i}{100},b_i=\frac{b_i}{100}$ 显然,如果$b_i=0$的话,直接求$\Pi a_i$就是答案. 解决反射问 ...

  6. 题解-BJOI2019 光线

    Problem loj3093 & x谷 题意概要:给定 \(n\) 块玻璃,每块玻璃有其折射比例与反射比例(折射比例+反射比例 不一定为 \(100\%\)),求从最上头打下一束光,有多少比 ...

  7. [BJOI2019]光线(DP)

    降智了…… 当你走头无路的时候就应该知道瞎搞一个DP: $p[i]$ 表示光射入第 $1$ 块玻璃时,从第 $i$ 块玻璃出去的光量. $q[i]$ 表示光射入第 $i$ 块玻璃时,从第 $i$ 块玻 ...

  8. [洛谷P5323][BJOI2019]光线

    题目大意:有$n$层玻璃,每层玻璃会让$a\%$的光通过,并把$b\%$的光反射.有一束光从左向右射过,问多少的光可以透过这$n$层玻璃 题解:事实上会发现,可以把连续的几层玻璃合成一层玻璃,但是要注 ...

  9. BJOI2019 题解

    BJOI2019 题解 在更了在更了 P5319 [BJOI2019]奥术神杖 对\(V_i\)求个\(\ln\)变成了让平均数最大,显然套分数规划,然后ac自动机上面dp #include<b ...

随机推荐

  1. NodeJs学习相关网址

    node官方中文 https://nodejs.org/zh-cn/   Node.js 中文网 https://nodejs.org/zh-cn/   Node.js 教程 | 菜鸟教程 http: ...

  2. Myisam 和 Innodb 区别

    MySQL默认采用的是MyISAM. MyISAM不支持事务,而InnoDB支持.InnoDB的AUTOCOMMIT默认是打开的,即每条SQL语句会默认被封装成一个事务,自动提交,这样会影响速度,所以 ...

  3. 如何禁用Chrome / Firefox /IE浏览器的Cookie

    Firefox: 点击菜单按钮并点击选项 按钮. 选择 隐私 面板. 将“Firefox 将会:”这一项设置为 使用自定义历史记录设置. 取消 接受来自站点的 Cookie 选项 即可禁用 Cooki ...

  4. HTML中关于class内容空格多类名的问题详解

    之所以想谈谈这个,不明所以.所以转载下来方便自己看看. 问:像 class="info fl" 这种class定义是何意思? 答:这里的空格隔开后,它们所代表的是两个类名,分别为i ...

  5. surf the internet scientifically

    You can get some useful information from the link below: 1. http://blog.sina.com.cn/s/blog_4891cbc50 ...

  6. Chapter3_操作符_关系操作符

    java中的关系操作符有等于“=”,不等于“!=”,大于“>”,小于“<”,大于等于“≥”,小于等于“≤”等.这些都不再赘述了,有一个有意思的点是关于等价性的讨论. 在java中测试两个对 ...

  7. python之高阶函数

    1.函数的参数能接收变量 def calc(x): return x*x n = 10 print(calc(n)) #输出为100 2.变量指向函数 def calc(x): return x*x ...

  8. HTML中Meta标签中http-equiv属性小结

    HTML中Meta标签中http-equiv的用法: <meta http-equiv="这里是参数" content="这里是参数值"> 1.Ex ...

  9. java实现随机产生6位数的方法总结

    package com.yin.test; import java.util.Random; import org.junit.Test; /** * @author v_yinyl * @date ...

  10. 26、TCP服务器原理

    TCP / IP的工作 TCP / IP是Internet上使用的网络协议.它是协议,ESP32本身自带了TCP/IP协议,所以,我们只需了解并学会运用即可. 首先,有IP地址.这是一个32位值,应该 ...