Loj #3093. 「BJOI2019」光线
Loj #3093. 「BJOI2019」光线
题目描述
当一束光打到一层玻璃上时,有一定比例的光会穿过这层玻璃,一定比例的光会被反射回去,剩下的光被玻璃吸收。
设对于任意 \(x\),有 \(x\times a_i\%\) 单位的光会穿过它,有 \(x\times b_i\%\) 的会被反射回去。
现在 \(n\) 层玻璃叠在一起,有 \(1\) 单位的光打到第 \(1\) 层玻璃上,那么有多少单位的光能穿过所有 \(n\) 层玻璃呢?
输入格式
第一行一个正整数 \(n\),表示玻璃层数。
接下来 \(n\) 行,每行两个非负整数 \(a_i,b_i\),表示第 \(i\) 层玻璃的透光率和反射率。
输出格式
输出一行一个整数,表示穿透所有玻璃的光对 \(10^9 + 7\) 取模的结果。
可以证明,答案一定为有理数。设答案为 \(a/b\)(\(a\) 和 \(b\) 是互质的正整数),你输出的答案为 \(x\),你需要保证 \(a\equiv bx \pmod {10^9 + 7}\)。
数据范围与提示
对于 \(5\%\) 的数据,保证 \(n=1\)。
对于 \(20\%\) 的数据,保证 \(n\le 2\)。
对于 \(30\%\)的数据,保证 \(n\le 3\)。
对于 \(50\%\) 的数据,保证 \(n\le 100\)。
对于 \(70\%\) 的数据,保证 \(n\le 3000\)。
对于 \(100\%\) 的数据:
- \(1\le n\le 5\times 10^5\)
- \(1\le a_i \le 100\)
- \(0\le b_i \le 99\)
- \(1\le a_i+b_i \le 100\)
- 每组 \(a_i\) 和 \(b_i\) 在满足上述限制的整数中随机生成。
\(\\\)
设\(f_i\)表示一单位光从上至下打到第\(i\)块玻璃之后能穿过第\(n\)块玻璃的单位数量。
\(g_i\)表示一单位光从下至上打到第\(i\)块玻璃之后能穿过第\(n\)块玻璃的单位数量。
特别地\(g_0=0,f_{n+1}=1\)。
于是我们容易得到:
\Rightarrow f_{i+1}=\frac{f_i-b_i\%g_{i-1}}{a_i\%}\\
\]
这里不需要考虑\(a_i=0\)的问题,因为\(a_i=0\)时答案为\(0\),特判掉就好了。
以及:
\]
我们可以设\(f_1=x\),然后按照上面两个\(DP\)出\(f_{n+1}\)用\(x\)表示时的系数。答案就是\(\frac{1}{f_{n+1}}\)。
代码:
#include<bits/stdc++.h>
#define ll long long
#define N 500005
using namespace std;
inline int Get() {int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9') {if(ch=='-') f=-1;ch=getchar();}while('0'<=ch&&ch<='9') {x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}return x*f;}
const ll mod=1e9+7;
ll ksm(ll t,ll x) {
ll ans=1;
for(;x;x>>=1,t=t*t%mod)
if(x&1) ans=ans*t%mod;
return ans;
}
int n;
ll a[N],b[N];
const ll inv100=ksm(100,mod-2);
ll f[N],g[N];
int main() {
n=Get();
for(int i=1;i<=n;i++) {
a[i]=inv100*Get()%mod,b[i]=inv100*Get()%mod;
}
for(int i=1;i<=n;i++) {
if(a[i]==0) {cout<<0;return 0;}
}
f[1]=1;
f[2]=ksm(a[1],mod-2);
g[1]=b[1]*f[2]%mod;
for(int i=2;i<=n;i++) {
f[i+1]=(f[i]-b[i]*g[i-1]%mod+mod)*ksm(a[i],mod-2)%mod;
g[i]=(a[i]*g[i-1]+b[i]*f[i+1])%mod;
}
cout<<ksm(f[n+1],mod-2);
return 0;
}
Loj #3093. 「BJOI2019」光线的更多相关文章
- LOJ 3093 「BJOI2019」光线——数学+思路
题目:https://loj.ac/problem/3093 考虑经过种种反射,最终射下去的光线总和.往下的光线就是这个总和 * a[ i ] . 比如只有两层的话,设射到第二层的光线是 lst ,那 ...
- LOJ#3093. 「BJOI2019」光线(递推+概率期望)
题面 传送门 题解 把\(a_i\)和\(b_i\)都变成小数的形式,记\(f_i\)表示\(1\)单位的光打到第\(i\)个玻璃上,能从第\(n\)个玻璃下面出来的光有多少,记\(g_i\)表示能从 ...
- 【LOJ】#3093. 「BJOI2019」光线
LOJ#3093. 「BJOI2019」光线 从下到上把两面镜子合成一个 新的镜子是\((\frac{a_{i}a_{i + 1}}{1 - b_{i}b_{i + 1}},b_{i} + \frac ...
- Loj #3089. 「BJOI2019」奥术神杖
Loj #3089. 「BJOI2019」奥术神杖 题目描述 Bezorath 大陆抵抗地灾军团入侵的战争进入了僵持的阶段,世世代代生活在 Bezorath 这片大陆的精灵们开始寻找远古时代诸神遗留的 ...
- LOJ 3093: 洛谷 P5323: 「BJOI2019」光线
题目传送门:LOJ #3093. 题意简述: 有 \(n\) 面玻璃,第 \(i\) 面的透光率为 \(a\),反射率为 \(b\). 问把这 \(n\) 面玻璃按顺序叠在一起后,\(n\) 层玻璃的 ...
- loj 3090 「BJOI2019」勘破神机 - 数学
题目传送门 传送门 题目大意 设$F_{n}$表示用$1\times 2$的骨牌填$2\times n$的网格的方案数,设$G_{n}$$表示用$1\times 2$的骨牌填$3\times n$的网 ...
- LOJ 3089 「BJOI2019」奥术神杖——AC自动机DP+0/1分数规划
题目:https://loj.ac/problem/3089 没想到把根号之类的求对数变成算数平均值.写了个只能得15分的暴力. #include<cstdio> #include< ...
- LOJ 3094 「BJOI2019」删数——角标偏移的线段树
题目:https://loj.ac/problem/3094 弱化版是 AGC017C . 用线段树维护那个题里的序列即可. 对应关系大概是: 真实值的范围是 [ 1-m , n+m ] :考虑设偏移 ...
- LOJ 3090 「BJOI2019」勘破神机——斯特林数+递推式求通项+扩域
题目:https://loj.ac/problem/3090 题解:https://www.luogu.org/blog/rqy/solution-p5320 1.用斯特林数把下降幂化为普通的幂次求和 ...
随机推荐
- Spring Aop源码分析
最近看了SpringAop的源码实现 大概记录一下aop的源码流程 创建一个最简单的一个测试类 package com.zcg.learn.Test; import org.aopalliance. ...
- happens-before 理解
从JDK 5 开始,JMM就使用happens-before的概念来阐述多线程之间的内存可见性.在JMM中,如果一个操作执行的结果需要对另一个操作可见, 那么这2个操作之间必须要存在happens-b ...
- 3.Git基础-查看当前文件状态、跟踪新文件、暂存文件、忽略文件、提交更新、移除文件、移动文件
1.检查当前文件状态 -- git status git diff git diff --staged git status :我们可以使用 git status 来查看文件所处的状态.当运 ...
- 【深度学习篇】--Seq2Seq模型从初识到应用
一.前述 架构: 问题: 1.压缩会损失信息 2.长度会影响准确率 解决办法: Attention机制:聚焦模式 “高分辨率”聚焦在图片的某个特定区域并以“低分辨率”,感知图像的周边区域的模式.通过大 ...
- 关于pip安装时提示"pkg_resources.DistributionNotFound"错误
使用pip install --upgrade pip升级pip中途失败,再次安装pip,完成后出现如下错误: 尝试重新安装pip也不行,同样会出现上述问题. 此时我们查看/usr/bin/pip文件 ...
- ASP.NET Core 实战:将 .NET Core 2.0 项目升级到 .NET Core 2.1
一.前言 最近一两个星期,加班,然后回去后弄自己的博客,把自己的电脑从 Windows 10 改到 Ubuntu 18.10 又弄回 Windows 10,原本计划的学习 Vue 中生命周期的相关知 ...
- What?VS2019创建新项目居然没有.NET Core3.0的模板?Bug?
今天是个值得欢喜的日子,因为VS2019在今天正式发布了.作为微软粉,我已经用了一段时间的VS2019 RC版本了.但是,今天有很多小伙伴在我的<ASP.NET Core 3.0 上的gRPC服 ...
- 104 - kube-scheduler源码分析 - predicate整体流程
(注:从微信公众:CloudGeek复制过来,格式略微错乱,更好阅读体验请移步公众号,二维码在文末) 今天我们来跟一下predicates的整个过程:predicate这个词应该是“断言.断定”的意思 ...
- EasyUI 使用tabs切换后datagrid显示不了内容
今天刚遇到这个问题,找了下各群的深度合作伙伴,没有好的答案,那就自己研究吧. 问题点在于打开tab1时,快速切到tab2,这时tab1的datagrid渲染未完成,再次回到tab1,因为是在不可见区域 ...
- off-canvas:抽屉式页面布局的纯css实现
Off-canvas即抽屉式的侧边导航栏布局,导航栏在大尺寸屏幕的时候可以设置无需隐藏,小尺寸屏幕的时候自动隐藏,并出现.off-canvas-toggle用以打开导航栏,打开导航栏的状态下可以点击非 ...