[BJOI2019] 光线】的更多相关文章

[BJOI2019]光线(递推) 题面 洛谷 题解 假装玻璃可以合并,假设前面若干玻璃的透光率是\(A\),从最底下射进去的反光率是\(B\),当前的玻璃的透光率和反光率是\(a,b\). 那么可以得到转移: \[A=A'\sum_{j=0}^\infty B'^j*b^j*a=\frac{A'a}{1-B'b}\] \[B=b+a\sum_{j=0}^\infty B'^j*b^j*a*B'=b+\frac{B'a^2}{1-B'b}\] 然后就做到线性了. #include<iostream…
题目链接: [BJOI2019]光线 设$F_{i}$表示从第$1$面玻璃上面向下射入一单位光线,穿过前$i$面玻璃的透光率. 设$G_{i}$表示从第$i$面玻璃下面向上射入一单位光线,穿过前$i$面玻璃的反光率. 那么可以推出: $F_{i}=F_{i-1}a_{i}\sum\limits_{k=0}^{+\infty}(G_{i-1}b_{i})^k$ $G_{i}=b_{i}+G_{i-1}a_{i}^2\sum\limits_{k=0}^{+\infty}(G_{i-1}b_{i})^…
题意 题目链接 分析 令 \(f_i\) 表示光线第一次从第一块玻璃射出第 \(i\) 块玻璃的比率. 令 \(g_i\) 表示光线射回第 \(i\) 块玻璃,再射出第 \(i\) 块玻璃的比率. 容易得到: \[\begin{cases}f_i=f_{i-1}a_i+f_{i-1}b_ig_i\\g_i=b_{i-1}a_i+b_{i-1}b_ig_i+a_{i-1}g_{i-1}a_i+a_{i-1}g_{i-1}b_ig_i\end{cases}\] 对于 (2) 式,移项可得 \[g_i…
传送门 先考虑\(n=1\)的情况不是输入数据都告诉你了吗 然后考虑\(n=2\),可以光线是在弹来弹去的废话,然后射出去的光线是个等比数列求和的形式,也就是\(x_1\sum_{i=1}^{\infty} d^i=x_1\frac{1}{1-d}\),然后弹回去的光线第一个光线就是\(b_i\),然后后面也是等比数列求和,算一下就好了 \(n>2\),我们做完\(n-1\)后,可以把刚刚算过的玻璃看成一块,因为已经知道会射出去多少以及弹回去多少,然后就变成了\(n=2\),那么递推做即可 我写…
看起来很麻烦,做起来并不难的题 以下设:$a_i=\frac{a_i}{100},b_i=\frac{b_i}{100}$ 显然,如果$b_i=0$的话,直接求$\Pi a_i$就是答案. 解决反射问题是这个问题的关键 我们显然可以认为一束光透过之后,可以等其他的光一起**透过干净** 再往后走. 这样就存在Dp的阶段了. 网上很多从“前i个整体透光率”“整体反光率”什么的,或者枚举反射次数,还要等比数列求和.其实不用这么麻烦. 设$f[i][1]$表示,一单位的光从玻璃i左边射过来,**最终透…
Problem loj3093 & x谷 题意概要:给定 \(n\) 块玻璃,每块玻璃有其折射比例与反射比例(折射比例+反射比例 不一定为 \(100\%\)),求从最上头打下一束光,有多少比例的光可以完全穿越 \(n\) 块玻璃 \(n\leq 5\times 10^5\) Solution 一眼线性高斯消元,但是我懒--物理题当然不要那么麻烦啦 由于考虑到这是物理模型,用物理思想考虑--合并玻璃 仅考虑合并两块玻璃,对于合并后的等价玻璃,需要算出其 从上往下与从下往上的反射透射率 共四个参数…
降智了…… 当你走头无路的时候就应该知道瞎搞一个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]…
题目大意:有$n$层玻璃,每层玻璃会让$a\%$的光通过,并把$b\%$的光反射.有一束光从左向右射过,问多少的光可以透过这$n$层玻璃 题解:事实上会发现,可以把连续的几层玻璃合成一层玻璃,但是要注意玻璃两侧的反射率可能是不一样的. 令$A$为前$i$层玻璃的透过率,$B$为前$i$层玻璃从右向左的反射率.$a$为第$i+1$层玻璃的透过率,$b$为第$i$层玻璃的反射率.那么前$i+1$层玻璃的透过率为$A'$,前$i+1$层玻璃从右向左的反射率为$B'$$$A'=Aa\sum_{i=0}^…
BJOI2019 题解 在更了在更了 P5319 [BJOI2019]奥术神杖 对\(V_i\)求个\(\ln\)变成了让平均数最大,显然套分数规划,然后ac自动机上面dp #include<bits/stdc++.h> #define il inline #define vd void typedef long long ll; il ll gi(){ ll x=0,f=1; char ch=getchar(); while(!isdigit(ch)){ if(ch=='-')f=-1; c…
Loj #3093. 「BJOI2019」光线 题目描述 当一束光打到一层玻璃上时,有一定比例的光会穿过这层玻璃,一定比例的光会被反射回去,剩下的光被玻璃吸收. 设对于任意 \(x\),有 \(x\times a_i\%\) 单位的光会穿过它,有 \(x\times b_i\%\) 的会被反射回去. 现在 \(n\) 层玻璃叠在一起,有 \(1\) 单位的光打到第 \(1\) 层玻璃上,那么有多少单位的光能穿过所有 \(n\) 层玻璃呢? 输入格式 第一行一个正整数 \(n\),表示玻璃层数.…
LOJ#3093. 「BJOI2019」光线 从下到上把两面镜子合成一个 新的镜子是\((\frac{a_{i}a_{i + 1}}{1 - b_{i}b_{i + 1}},b_{i} + \frac{a_{i}^{2}b_{i}}{1 - b_{i}b_{i + 1}})\) #include <bits/stdc++.h> #define fi first #define se second #define pii pair<int,int> #define mp make_p…
题目大意:有一束光线要依次穿过$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^2…
题目:https://loj.ac/problem/3093 考虑经过种种反射,最终射下去的光线总和.往下的光线就是这个总和 * a[ i ] . 比如只有两层的话,设射到第二层的光线是 lst ,那么 \( lst' = ( lst + lst*b[2]*b[1] + lst*(b[2]*b[1])^2 + ... )*a[2] \) 考虑令 f[ i ] 表示 “从第 i 层下面射上来的单位光线在考虑第 i+1 层反射的情况下射下去的值” . \( f[i] = b[i]+a[i]*f[i-…
题目传送门:LOJ #3093. 题意简述: 有 \(n\) 面玻璃,第 \(i\) 面的透光率为 \(a\),反射率为 \(b\). 问把这 \(n\) 面玻璃按顺序叠在一起后,\(n\) 层玻璃的透光率. \(0 < a_i \le 1\),\(0 \le b_i < 1\). 题解: 题目中告诉我们,\(n\) 层的玻璃也有透光率,换句话说,多层的玻璃可能可以看作一层. 从这个角度思考,考虑已经求出了前 \(i - 1\) 层玻璃的透光率,如何求出前 \(i\) 层玻璃的透光率. 可以发…
题面 传送门 题解 把\(a_i\)和\(b_i\)都变成小数的形式,记\(f_i\)表示\(1\)单位的光打到第\(i\)个玻璃上,能从第\(n\)个玻璃下面出来的光有多少,记\(g_i\)表示能从第\(i\)块玻璃反射出来的光有多少,,递推式的话,我们枚举一下这束光在\(i\)和\(i+1\)块玻璃之间反射了几次就可以了 \[ \begin{aligned} f_i &=a_i\left(f_{i+1}+g_{i+1}\times b_i\times f_{i+1}+g_{i+1}\time…
Loj #3089. 「BJOI2019」奥术神杖 题目描述 Bezorath 大陆抵抗地灾军团入侵的战争进入了僵持的阶段,世世代代生活在 Bezorath 这片大陆的精灵们开始寻找远古时代诸神遗留的神器,试图借助神器的神秘 力量帮助她们战胜地灾军团. 在付出了惨痛的代价后,精灵们从步步凶险的远古战场取回了一件保存尚完好的神杖.但在经历过那场所有史书都视为禁忌的"诸神黄昏之战"后,神杖上镶嵌的奥术宝石 已经残缺,神力也几乎消耗殆尽.精灵高层在至高会议中决定以举国之力收集残存至今的奥术宝…
题目链接: [BJOI2019]排兵布阵 对于每座堡垒,将$s$个对手排序,显然如果安排的兵力能打败第$i$个对手就一定能打败前$i-1$个. 那么对于第$i$座城堡,可以看做有$s+1$个物品(可以不选),第$j$个物品代价为$2*v[j]+1$,收益为$i*j$. 剩下的只需要将每座城堡的所有物品放在一组然后分组背包即可. #include<set> #include<map> #include<queue> #include<stack> #inclu…
[BJOI2019]删数(线段树) 题面 洛谷 题解 按照值域我们把每个数的出现次数画成一根根的柱子,然后把柱子向左推导,\([1,n]\)中未被覆盖的区间长度就是答案. 于是问题变成了单点修改值,即修改两根柱子的长度.全体修改就可以理解为询问区间的平移. 那么只需要拿线段树维护这个东西就行了. #include<iostream> #include<cstdio> using namespace std; #define MAX 150150 #define lson (now&…
[BJOI2019]排兵布阵(动态规划) 题面 洛谷 题解 暴力dp: 设\(f[i][j]\)表示考虑到了第\(i\)座城市用了\(j\)人的最大收益,枚举在这个城市用多少人就可以了. 优化: 发现用的人数一定是某个敌人的人数的二倍加一,那么决策只有\(O(s)\)个. 时间复杂度\(O(snm)\).(不满) #include<iostream> #include<cstdio> #include<cstring> #include<algorithm>…
[BJOI2019]勘破神机(斯特林数,数论) 题面 洛谷 题解 先考虑\(m=2\)的情况. 显然方案数就是\(f_i=f_{i-1}+f_{i-2}\),即斐波那契数,虽然这里求出来是斐波那契的第\(n+1\)项,但是本质上没什么区别,就默认是斐波那契数列了. 斐波那契数列的特征根是\(\alpha=\frac{1+\sqrt 5}{2},\beta=\frac{1-\sqrt 5}{2}\),然后大力设一下通项是\(f_n=A\alpha^n+B\beta^n\),可以解出\(f_n=\f…
[BJOI2019]奥术神杖(分数规划,动态规划,AC自动机) 题面 洛谷 题解 首先乘法取\(log\)变加法,开\(c\)次根变成除\(c\). 于是问题等价于最大化\(\displaystyle \frac{\sum val_i}{c}\).典型的分数规划的形式. 二分权值\(k\),每个点的点权变成\(val_i-k\),转为求最值,那么直接在\(AC\)自动机上\(dp\)就行了. 注意精度问题. #include<iostream> #include<cstdio> #…
传输公式 传输方程是控制光线在吸收.发射和散射辐射的介质中的行为的基本方程.它解释了第11章中描述的所有体积散射过程--吸收.发射和内.外散射.并给出了一个描述环境中辐射分布的方程.光传输方程实际上是传输方程的一个特例,由于忽略参与介质而进行简化,并专门用于从表面散射. 在方程的基本形式中,传输方程式是一个描述光束在空间中某一点上的辐射量如何变化的积分微分方程.它可以转化为一个纯积分方程,用以描述描述了沿射线无穷多个坐标点的参与介质的效果. 回忆一下11.1.4章节的辐射源项Ls,它表示p点处ω…
采样反射函数 BxDF::Sample_f()方法根据与相应的散射函数相似的分布来选择方向.在8.2节中,该方法用于寻找来自完美镜面的反射和透射光线;在这里讲介绍实现其他类型的采样技术. BxDF::Sample_f()在[0,1)范围内取得两个使用反演法取得的样本,其中这些样本是使用分层采样或者低偏差采样生成的,所以这些样本本身具有很好的分布性. 这个方法默认采用余弦加权的半球采样.这个样本分布对于大多数BRDF会产生正确的结果. Spectrum BxDF::Sample_f(const V…
奥术神杖(分数规划.AC自动机) 发现我们要求的东西很像一个平均数(实际上就是几何平均数),那么我们现在考虑一种运算,使得乘法能够变成加法.开根可以变成除法,不难想到取对数满足这个条件.我们对\(\sqrt[v]{\prod a_i}\)取\(ln\)之后得到\(\frac{1}{v} \sum ln\ a_i\),那么我们现在需要它最大. 这显然是一个分数规划,二分之后考虑check.发现check类似于字符串匹配,在AC自动机上DP求解即可.复杂度\(O(nslog\frac{ln 10^9…
[BJOI2019]勘破神机 推式子好题 m=2,斐波那契数列,$f_{n+1}$项 不妨$++l,++r$,直接求$f_n$ 求$\sum C(f_n,k)$,下降幂转化成阶乘幂,这样都是多项式了,方便交换求和号 最后面的斐波那契数列用通项公式求.二项式展开. 交换求和号之后,枚举i,j 最后一项是等比数列求和. %rqy m=3, n为奇数是0 n是偶数时,令n=n/2 递推公式:$g_n=4\times g_{n-1}+g_{n-2}$ 证明:枚举从后往前第一个完全分出的块,除了块长为2的…
光线求交 光线定义:position \(a(t)\) = \(o\) + \(t\vec{d}\); 球定义: center p, radius r; 平面定义:normal \(\vec{n}\) , offset t; 三角形定义:position \(a_1\), \(a_2\), \(a_3\), normal \(\vec{n}\); 光线与球相交 (Ray/Sphere Intersection) c++代码 : bool HitTest(const Ray& ray, HitTe…
30个Python物联网小实验5:光线感应灯 光线传感器 光线变化执行函数 光线状态执行函数 30个Python物联网小实验5:光线感应灯 光线传感器 可以检测周围环境的亮度: 方向性较好,感知特定方向的亮度: 灵敏度可调,用螺丝刀旋转图中蓝色电位器即可: 工作电压:3.3v~5v 数字开关输出:0或1 设有固定螺栓孔,方便安装 光线变化执行函数 接线方法:正极接树莓派的5v正极,负极接树莓派的GND地线,信号输出针脚接GPIO18号口. 上代码: from gpiozero import Li…
[BJOI2019]排兵布阵 DP 比较好想的DP,设\(dp[i][j]\)表示第\(i\)个城堡时,已派出\(j\)个士兵.决策时,贪心派出恰好严格大于某一玩家派出的数量的两倍(不然浪费).我们发现又可以排序预处理出\(a[i][j]\)表示第\(i\)个城堡,出兵数量第\(j\)大的人出兵数量(因为这样可以很容易算出贡献,即为\(k\times i\)) dp转移方程即为: \[ dp[j]=MAX(dp[j-a[i][k]*2-1]+k*i, dp[j]); \] AC Code: #i…
题目链接: [BJOI2019]奥术神杖 答案是$ans=\sqrt[c]{\prod_{i=1}^{c}v_{i}}=(\prod_{i=1}^{c}v_{i})^{\frac{1}{c}}$. 这样不大好求,我们将这个式子取$ln$,变成$ln\ ans=\frac{1}{c}\sum_{i=1}^{c}ln\ v_{i}$. 这显然是一个分数规划,每次二分一个答案$mid$,将每个串的权值都减去$mid$,那么只需要求最大价值是否大于$0$即可. 剩下的问题就是一个在$AC$自动机上的$D…
题目链接: [BJOI2019]送别 我们将每段墙的每一面看成一个点,将每个点与相邻的点(即按题中规则前进或后退一步能走到的点)连接.那么图中所有点就形成了若干个环,而添加一段墙或删除一段墙就是把两个环合并或者将一个环拆成两个环(当然可能只是在环上插入或删除两个点).将每个环从任意位置拆成序列,用平衡树(平衡树需要能合并.分裂)维护即可.我们记录每个坐标点的上下左右是否有墙,如果一个坐标点的四个方向都没有墙则视为这个点是空的. 对于插入,有四种情况: 1.插入墙的两端都是空的,直接将插入墙的两个…