分类: 概率论

  • 第二届天元编程邀请赛(提高组) 解题报告

    一场相当有收获的比赛。比赛链接

    A – 石老板举世无双

    解法一

    尝试观察规律。我们发现,在完成$s$次操作以后,左端点的可能取值为$\dfrac{xa+(2^s-x)b}{2^s}, x \in [1, 2^s]$,右端点的可能取值为$\dfrac{xa+(2^s-x)b}{2^s}, x \in [0, 2^s)$。假如现在我们达到最终状态,其$l=\dfrac{(x+1)a+(2^s-x-1)b}{2^s}, r=\dfrac{xa+(2^s-x)b}{2^s}$。那么,在$x$的二进制表示中,如果从高到底第$\mathrm{pos}$位为$1$,则在第$\mathrm{pos}$轮中,有check (mid) == 0,向右区间递归;否则向左区间递归。这是很容易解释的:若向右递归,则右端点不变。而在下一层,右端点表示中$a, b$的所有系数乘$2$,所以体现为二进制位末尾添一个$0$。反之,就变成$(x+(x+1))/2$,在下一层中体现为$2x+1$。如果其有$\operatorname{popc}(x)$位为$1$,则到达该状态的概率为$p_0^{\operatorname{popc}(x)}p_1^{s-\operatorname{popc}(x)}$。

    以$s=3$时的状态$l=\dfrac{3a+5b}{8}, r=\dfrac{2a+6b}{8}$为例。$2$的三位二进制表示为$\text{0b010}$,则推断出在前三轮分别向右、左、右区间递归,到达其的概率为$p_0p_1^2$。 (更多…)