2024.10.12 test

A

一棵二叉树,相同深度的点位置相邻的有一条边,给出两条根开始的路径,可以向上/左/右/左儿子/右儿子走,问最后走到的两个点最短距离。路径长度 105

考虑求出两条路径分别走到的位置,用根开始的路径表示,每次向左/向右,用 0/1 表示。
最后统计答案,两个点一定是走到某个深度再碰面,从第一处分叉点开始,浅到深枚举这个深度。
路径用二进制表示出来即可。考虑计算这个二进制数,我们可以表示为重复 ×2+di 的形式。
di 求出来,最后不停地进位即可。

B

n 个长度为 m 的字符串,其中有若干个位置是不确定的,随机填一个小写字母进去,问字典树节点个数的期望。n12,m1000

考虑拆贡献,一棵字典树我们计算其每个节点的贡献。
枚举集合 s 里的串在第 p 位组成一个节点的概率,如果不考虑 s 外的串那么概率容易计算。
但是会导致集合外的串也可能前 p 位与 s 集合相等,也就是说一个方案会被算多次,有两种容斥:
s 的答案减去所有 stt 的答案;或者是加上 |s|=1 的,减去 |s|=2,加上 |s|=3 的...
原理是跟二项式反演的原理相同:也就是 C|s|1C|s|2+C|s|3+...=1
即大小为 |s| 的一个方案,会被 ts 的计算到 C|s||t| 次,抵消掉贡献使得系数为 1

C

A 与 B 玩石头剪刀布,一轮游戏分为 n 局,给出每局 B 出什么的概率。对于每一轮赢得多的人获胜,如果赢的数量相同那么平局,该轮作废,若 A 连续赢 m1 局 A 胜,B 连续 m2 局 B 胜,安排 A 每局的策略,问 A 胜的最大概率。 n1000,m100

考虑设计一个 dp,设 fx,y 表示当前进行了 x 局,当前差为 y 局,A 赢的概率,转移取最大的转移即可。
但是有一个问题,就是若 y=0 平局的话,会返回 f0,0,那么就无法 dp 因为有后效性。
也就是说在一轮中会出现平局,避免平局的干扰,所以我们需要求胜的概率与负的概率之比的最大值。
出现比值考虑用分数规划,不妨当前二分到 mid,也就是说检验 p(win)p(lose)×mid0
dp 的时候直接求当前 p(win)p(lose)×mid 的最大值即可。
这么做的话,边界条件就明了,fn,0=0,fn,y=mid,fn,y=1
如果一定要求胜利的概率的话,也可以直接而二分 fn,0 的取值,看最后 f0,0 与其比较大或小即可。
再求出负的概率也是一样。

posted @   s1monG  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
历史上的今天:
2023-10-13 2023.10.13 Online test
点击右上角即可分享
微信分享提示