给你一块巧克力,横着最多切 a 刀,竖着最多切 b 刀,定义每切一刀的收益为切完后所有巧克力的和,每次随机在能切的所有地方等概率随机切一刀,求切 k(k≤a+b) 到刀得到收益的期望。答案对 998244353 取模。
a,b≤1018。
我们考虑每个正方形左下角(如下图)为贡献,如黄色格子的贡献我们看成是点 P 的贡献,那我们可以把点分成三类:中间的(红色点),边缘的(蓝色点),左下角的(绿色点)。
如果一个点“暴露在了外面”,即该点对应的方块成为了整个方块的左下角,那么之后每切一次它就会对答案有 1 的贡献。
首先我们来看中间的点(红点)。
对于每个点,如果第 i 次切割后它暴露在外面,那么前 i 次切割必定有一次切了它所在竖列,还有一次且了它所在横行。所以有 (2i) 中排列方案。而从这么多横行于纵列中选 2 条线的方案数为 (2a+b),所以第i 次切完后该点暴露在外面的概率为:
E(i)=(2a+b)(2i)
由于切了 k 次,所以每个点贡献的期望为:
i=1∑kE(i)=i=1∑k(2a+b)(2i)=(2a+b)∑i=1k(2i)=(2a+b)(3k+1)=2(a+b)(a+b−1)6(k+1)⋅k⋅(k−1)=3⋅(a+b)⋅(a+b−1)(k+1)⋅k⋅(k−1)
总共有 ab 个红点,所以总的期望为:
3⋅(a+b)⋅(a+b−1)(k+1)⋅k⋅(k−1)⋅ab
然后是边上的点(蓝点)。
每次切都会多一个蓝点,所以贡献一定为:
i=1∑ki=2k(k+1)
最后是左下角的绿点,每次切都会它都会有 1 的贡献,所以是k。
所以总的贡献为:
3⋅(a+b)⋅(a+b−1)(k+1)⋅k⋅(k−1)⋅ab+2k⋅(k+1)+k
优秀的 O(1) 算法。