[BJOI2019]光线(DP)
降智了……
当你走头无路的时候就应该知道瞎搞一个DP:
$p[i]$ 表示光射入第 $1$ 块玻璃时,从第 $i$ 块玻璃出去的光量。
$q[i]$ 表示光射入第 $i$ 块玻璃时,从第 $i$ 块玻璃出去的光亮。
为什么是第 $i$ 块呢?因为我们最后只关注 $p[n]$,所以我们关注的反射都是前 $i$ 块射向第 $i+1$ 块(也就是 $q[i]$)和从第 $i+1$ 块射向前 $i$ 块(也就是 $b_{i+1}$)。
初始状态 $p[1]=a_1,q[1]=b_1$。答案为 $p[n]$。
随便画个图得到转移:
$$p[i]=\dfrac{p[i-1]a_i}{1-q[i-1]b_i}$$
$$q[i]=b_i+\dfrac{q[i-1]a_i^2}{1-q[i-1]b_i}$$
时间复杂度 $O(n\log)$。可以做到 $O(n)$,但是懒得写了。
#include<bits/stdc++.h>
using namespace std;
const int maxn=,mod=,inv100=;
#define FOR(i,a,b) for(int i=(a);i<=(b);i++)
#define ROF(i,a,b) for(int i=(a);i>=(b);i--)
#define MEM(x,v) memset(x,v,sizeof(x))
inline int read(){
int x=,f=;char ch=getchar();
while(ch<'' || ch>'') f|=ch=='-',ch=getchar();
while(ch>='' && ch<='') x=x*+ch-'',ch=getchar();
return f?-x:x;
}
int n,a[maxn],b[maxn],f[maxn],g[maxn];
inline int add(int x,int y){return x+y<mod?x+y:x+y-mod;}
inline int sub(int x,int y){return x<y?x-y+mod:x-y;}
inline int mul(int x,int y){return 1ll*x*y%mod;}
inline int qpow(int a,int b){
int ans=;
for(;b;b>>=,a=mul(a,a)) if(b&) ans=mul(ans,a);
return ans;
}
int main(){
n=read();
FOR(i,,n) a[i]=mul(read(),inv100),b[i]=mul(read(),inv100);
f[]=a[];g[]=b[];
FOR(i,,n){
int inv=qpow(sub(,mul(g[i-],b[i])),mod-);
f[i]=mul(mul(f[i-],a[i]),inv);
g[i]=add(b[i],mul(mul(mul(a[i],a[i]),g[i-]),inv));
}
printf("%d\n",f[n]);
}
[BJOI2019]光线(DP)的更多相关文章
- [BJOI2019]光线(递推)
[BJOI2019]光线(递推) 题面 洛谷 题解 假装玻璃可以合并,假设前面若干玻璃的透光率是\(A\),从最底下射进去的反光率是\(B\),当前的玻璃的透光率和反光率是\(a,b\). 那么可以得 ...
- [BJOI2019]光线——递推
题目链接: [BJOI2019]光线 设$F_{i}$表示从第$1$面玻璃上面向下射入一单位光线,穿过前$i$面玻璃的透光率. 设$G_{i}$表示从第$i$面玻璃下面向上射入一单位光线,穿过前$i$ ...
- [BJOI2019] 光线
看起来很麻烦,做起来并不难的题 以下设:$a_i=\frac{a_i}{100},b_i=\frac{b_i}{100}$ 显然,如果$b_i=0$的话,直接求$\Pi a_i$就是答案. 解决反射问 ...
- [BJOI2019]光线[递推]
题意 题目链接 分析 令 \(f_i\) 表示光线第一次从第一块玻璃射出第 \(i\) 块玻璃的比率. 令 \(g_i\) 表示光线射回第 \(i\) 块玻璃,再射出第 \(i\) 块玻璃的比率. 容 ...
- luogu P5323 [BJOI2019]光线
传送门 先考虑\(n=1\)的情况不是输入数据都告诉你了吗 然后考虑\(n=2\),可以光线是在弹来弹去的废话,然后射出去的光线是个等比数列求和的形式,也就是\(x_1\sum_{i=1}^{\inf ...
- 题解-BJOI2019 光线
Problem loj3093 & x谷 题意概要:给定 \(n\) 块玻璃,每块玻璃有其折射比例与反射比例(折射比例+反射比例 不一定为 \(100\%\)),求从最上头打下一束光,有多少比 ...
- [洛谷P5323][BJOI2019]光线
题目大意:有$n$层玻璃,每层玻璃会让$a\%$的光通过,并把$b\%$的光反射.有一束光从左向右射过,问多少的光可以透过这$n$层玻璃 题解:事实上会发现,可以把连续的几层玻璃合成一层玻璃,但是要注 ...
- BJOI2019 题解
BJOI2019 题解 在更了在更了 P5319 [BJOI2019]奥术神杖 对\(V_i\)求个\(\ln\)变成了让平均数最大,显然套分数规划,然后ac自动机上面dp #include<b ...
- Loj #3093. 「BJOI2019」光线
Loj #3093. 「BJOI2019」光线 题目描述 当一束光打到一层玻璃上时,有一定比例的光会穿过这层玻璃,一定比例的光会被反射回去,剩下的光被玻璃吸收. 设对于任意 \(x\),有 \(x\t ...
随机推荐
- macbook pro更换键盘的排线
以下是拆机图解 很简单的 有点动手能力的都可以更换 另外附加淘宝上的链接 https://item.taobao.com/item.htm?spm=a1z09.2.0.0.68a12e8dYAiQIx ...
- 海边拾贝-B-优秀博客/网站
记下若干优秀博客,方便后期检索.会不定期更新: 优秀的程序员,从使用Github开始:https://help.github.com/en/github/managing-your-work-on-g ...
- 匿名函数和for_each用法
匿名函数,C++11的 for_each 用法 #include <iostream> #include <algorithm> #include "testClas ...
- 一位IT民工的十年风雨历程
距离2020年只有30天了,转眼毕业快10年. 回首自己,已三十有三,中年危机. 古人云三十而立,我却还在测试途中摸爬滚打. 创业,自由职业永远是一个梦,白日梦. 焦虑.迷茫.看不到希望. 这两天一场 ...
- tf.ConfigProto()
tf.ConfigProto一般用在创建session的时候用来对session进行参数配置 with tf.Session(config=tf.ConfigProto(...)...) tf.Con ...
- python threading ThreadPoolExecutor源码解析
future: 未来对象,或task的返回容器 1. 当submit后: def submit(self, fn, *args, **kwargs): with self._shutdown_lock ...
- Layui新手教程----帮助小白少走弯路
Layui的学习 Layui官方文档:https://www.layui.com/ 先说说为啥我接触到了layui,因为需要去参与做一个项目,被学长推荐去学习layui,用来处理一些前端的问题. La ...
- JWT攻击手册
JSON Web Token(JWT)对于渗透测试人员而言可能是一种非常吸引人的攻击途径,因为它们不仅是让你获得无限访问权限的关键,而且还被视为隐藏了通往以下特权的途径:特权升级,信息泄露,SQLi, ...
- 2019-11-25-加强版在国内分发-UWP-应用正确方式-通过win32安装UWP应用
原文:2019-11-25-加强版在国内分发-UWP-应用正确方式-通过win32安装UWP应用 title author date CreateTime categories 加强版在国内分发 UW ...
- OSI七层模型简述
一.OSI七层参考模型 开放式系统互联通信参考模型(英语:Open System Interconnection Reference Model,缩写为 OSI),简称为OSI模型(OSI model ...