一场相当有收获的比赛。比赛链接
解法一
尝试观察规律。我们发现,在完成s次操作以后,左端点的可能取值为2sxa+(2s−x)b,x∈[1,2s],右端点的可能取值为2sxa+(2s−x)b,x∈[0,2s)。假如现在我们达到最终状态,其l=2s(x+1)a+(2s−x−1)b,r=2sxa+(2s−x)b。那么,在x的二进制表示中,如果从高到底第pos位为1,则在第pos轮中,有check (mid) == 0
,向右区间递归;否则向左区间递归。这是很容易解释的:若向右递归,则右端点不变。而在下一层,右端点表示中a,b的所有系数乘2,所以体现为二进制位末尾添一个0。反之,就变成(x+(x+1))/2,在下一层中体现为2x+1。如果其有popc(x)位为1,则到达该状态的概率为p0popc(x)p1s−popc(x)。
以s=3时的状态l=83a+5b,r=82a+6b为例。2的三位二进制表示为0b010,则推断出在前三轮分别向右、左、右区间递归,到达其的概率为p0p12。 (更多…)
More