题目大意:有一束光线要依次穿过$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. mongodb-MYSQL

    #encoding:utf8 import pymongoimport MySQLdbimport randomdef GetMongoData(): MyQuery = Mongo_Tab.find ...

  2. IO高级应用关于字符码表

    ASCII码表: 计算机里只有数字,我在计算机软件里的一切都是用数字来表示,屏幕上显示的一个个字符也不例外.计算机诞生在美国,最开始所用到字符就是我们现在键盘上的一些符号和少数几个特殊的符号,每一个字 ...

  3. 442. Find All Duplicates in an Array找出数组中所有重复了两次的元素

    [抄题]: Given an array of integers, 1 ≤ a[i] ≤ n (n = size of array), some elements appear twice and o ...

  4. Entity Framework - PostgresQL CodeFirst

    经过几年的更新及业界对Entity Framework 的认同. 现在 EF 可以支持的数据库越来越多了.而PostgresQL 数据库现在也可以使用code first的方式来创建数据库了. 不多说 ...

  5. PHP开发——超全局数组变量

    概述 l  JS中的变量分两类:局部变量.全局变量. l  PHP中的变量分三类:局部变量.全局变量.超全局变量. l  局部变量:在函数内部声明的变量,就是局部变量.函数执行完毕,局部变量就消失了. ...

  6. js data日期初始化的5种方法

    var objDate=new Date([arguments list]);  参数形式有以下5种: 1)new Date("month dd,yyyy hh:mm:ss");  ...

  7. HTTP状态码之【整理篇】

    =================================================================================== 状态码的职责:当客户端向服务器端 ...

  8. Android Studio 内置SDK在 unity中使用

    1 AndroidStudio 安装好后更新SDK Platforms 2 在 File -> Other Settings -> Default Project Structure 中可 ...

  9. solr7.7.0搜索引擎使用(一)(下载安装)

    一.下载安装 可以直接在官网下载地址:https://lucene.apache.org/solr/ 解压之后,目录结构如下图,bin里边提供部署的文件,contrib提供额外的jar包,docs提供 ...

  10. kbmmw中向服务器端传递对象的一种简单方式

    运行环境:delphi 10.2+kbmmw 5.6.20 在kbmmw 的老版本中,要向服务器传送一个本地的对象,一般都需要进行一些转换,例如通过序列化的方式. 在新版的kbmmw中这一切都变的很简 ...