题意
有一排高楼,每一栋高楼有一个正整数高度,高度为 (i) 的概率为 (2^{-i})。一栋楼的每层从下往上依次编号为 (0,1,2,cdots,i-1)。
为了出题,大楼之间安装了溜索。在一栋楼的第 (i) 层和另一栋楼的第 (i) 层之间有一条溜索,当且仅当这两栋楼之间没有一栋大楼高度达到 (i) 层。
Alice 和 Bob 要数数有多少栋楼。
Alice 非常细心,她从最左侧的楼出发,计数器为 (1)。然后她向右移动,每经过一栋楼就将计数器 (+1)。
Bob 非常没耐心,他希望尽快数完。他从最左侧的楼出发,计数器为 (1)。他只使用溜索在大楼之间移动。Bob 会一直用最高的溜索向右移动,但由于恐高,他会忽略那些编号超过 (h) 的楼层。Bob 用溜索旅行跑得比香港记者还快,以至于他根本没法数清经过了多少栋楼,因此每经过一条溜索后只是将计数器 (+2^i),其中 (i) 是这条溜索所在楼层的编号。
举个例子。有 (6) 栋大楼,从左到右的高度分别是 (1,4,3,4,1,2),且 (h=2)。Alice 开始时计数器为 (1),并且将计数器加了五次 (1),得到的结果是 (6)。Bob 开始时计数器为 (1),然后他依次加上 (1,4,4,2),最终得到 (12)。注意,Bob 出于恐高忽略掉了最高的溜索。
当 Alice 和 Bob 到达最右端的大楼时,他们将各自的计数器拿出来比较。给出 Alice 或者 Bob 的计数器的值,你需要计算出另外一个人的计数器的期望值。
(2le nle 30000,space 0le hle 30)
题解
二合一?
Bob
考虑一个子问题:(Bob) 每经过一条溜索,期望经过了多少栋楼。
设它的计数器累加了 (2^h),即溜索所在楼层的编号是 (h),高度是 (h+1)。那么中间那些楼的高度都必须 (le h)。
设每一栋楼的高度(le h) 的概率设为 (sum),题目说了高度为 (i) 的概率是 (2^{-i}),则 $$sum=frac{1}{2}+frac{1}{2^2}+cdots+frac{1}{2^n}=frac{2^n-1}{2^n}=1-frac{1}{2^i}$$
那么从一栋高度为 (H) 的楼的第 (hin [1,H]) 层出发走溜索,期望经过的高楼数(不算出发时所在的那栋楼)就是 $$E=1 imes P(中间没有小楼) imes P(最后一栋楼的高度gt h)+2 imes P(中间有一栋小楼) imes P(最后一栋楼的高度gt h)$$
((P(x)) 表示事件 (x) 发生的概率)
结合 (sum) 的定义可得 $$egin{align} E&=1 imes sum^0 imes (1-sum)+2 imes sum^1 imes (1-sum)+cdots+infty imes sum^{infty} imes (1-sum)
onumber &= (1 imes sum^0+2 imes sum^1+cdots+infty imes sum^{infty}) (1-sum)
onumber end{align}$$
这是个等差乘等比,可以用套路简化:$$sum imes E = (1 imes sum^1+2 imes sum^2+cdots) (1-sum)+cdots$$ $$E = (1 imes sum^0+2 imes sum^1+cdots) (1-sum)+cdots$$
下减上得 $$(1-sum)E = (sum^0+sum^1+sum^2+cdots+sum^{infty}) (1-sum)$$
约掉 (1-sum),观察中间那一坨等比数列。等比数列的求和公式是 (frac{a_1(1-q^n)}{1-q}),因为 (0lt sumlt 1),所以 (0lt qlt 1)。那么当 (n o infty) 时,(q^n o 0),然后这个东西就变成了 (frac{a_1}{1-q})。这就是喜闻乐见的无穷项等比数列的求和公式。
于是上式可以化成 $$E=1+frac{sum}{1-sum}=frac{1}{1-sum}$$
之前算过 (sum=frac{2^h-1}{2^h}),所以 (E=2^h)。
所以 Bob 的计数器每累加 (2^h) 时,就期望经过了 (2^h) 栋楼。算上起点(即最左边的)那一栋楼,总高楼数的期望值就是 (n)。
所以输入 Bob 时,Alice 的计数器的期望值就是 (n)……
Alice
考虑一层一层地向上增加所有楼的高度,就是不断的用更高层的溜索去覆盖区间中低层的溜索。
因为我们每次都是走高度最高的溜索,那么我们从低到高枚举溜索的最大高度,计算该层所有溜索的贡献。
编号为 (0) 的层的答案显然是 (n)(所有楼至少都有 (1) 层,所以每相邻两栋楼之间都有一条溜索)。
假设我们加到编号为 (i) 的层,枚举溜索长度为 (j)。
这个溜索可能出现在 (n-j) 个位置,每个位置出现的条件:两端的楼高在 ([i+1,infty]),中间的楼高在 ([1,i])。
这就是之前算过的 (sum) 的定义,每个位置出现的概率为 ((1-frac{1}{2^i})^{j-1} imes (frac{1}{2^i})^2)。
根据 Bob 部分的结论,一条新溜索的期望长度为 (2^i)。但一条新溜索覆盖了一些之前高度比它低的溜索,我们要从 (2^i) 中减去 (2^{i-1} imes 两栋楼中间位于编号为 i-1 的层的溜索的期望数量 cnt)。
中间一共有 (j-1) 栋楼,设中间每一栋楼高度为 (i) 的概率为 (p),因为 (i-1) 层溜索的数量 就是中间高度为 (i) 的楼数 (+1),所以 (cnt = 1 + (j-1) imes p)。
考虑如何计算 (p)。因为中间那些楼的高度一定在 ([1,i]) 中,所以 (p = frac{高度为 i 的概率}{高度在 [1,i] 的概率} = frac{frac{1}{2^i}}{frac{2^i-1}{2^i}} = frac{1}{2^i-1})。
最后答案就是 $$ans = n + sumlimits_{i=1}^h sumlimits_{j=1}^n (n-j) imes (1-frac{1}{2^i})^{j-1} imes (frac{1}{2^i})^2 imes (2^i - 2^{i-1} imes (1+(j-1) imes frac{1}{2^i-1}))$$
复杂度 (O(nm))。
scb 的 Alice 做法
他考场上切的 dp 做法,他无敌了Orz