LOJ6300 博弈论与概率统计 组合、莫队

传送门


如果在\(0\)以下之后仍然会减分,那么最后的结果一定是\(N-M\)

注意到如果在Alice分数为\(0\)时继续输,那么就相当于减少了一次输的次数。也就是说如果说在总的博弈过程中,Alice在分数等于\(0\)时输了\(x\)次,那么最后的结果就是\(N-M+x\)

不妨考虑一个序列\(a_i\),如果\(a_i = 1\)表示Alice第\(i\)局输了,\(a_i = -1\)表示第\(i\)局赢了,那么不难发现\(x =\)序列\(a_i\)的最大前缀和。不妨设\(max_a\)表示序列\(a\)的最大前缀和。然后可以发现序列\(a_i\)与格路问题有一些相似:从\((0,0)\)开始走路,如果\(a_i = 1\)则第\(i\)步向上走一格,否则向右走一格,那么一个满足条件的序列\(a\)是一个从\((0,0)\)\((N,M)\)的路径,而\(max_a\)等于这条路径上所有的点中\(y-x\)的最大值。

对于一组询问,我们要求的就是\(Ans = \sum\limits_{t} max_t\),当\(N > M\)\(Ans = \sum\limits_{i=1}^M \sum\limits_{t} [max_t \geq i]\),当\(N \leq M\)\(Ans = M - N + \sum\limits_{i = M - N + 1} ^ M \sum\limits_{t} [max_t \geq i]\)

对于\(i \in [\max(M - N , 0) + 1 , M]\)\(\sum\limits_t [max_t \geq i]\)相当于从\((0,0)\)\((N,M)\)必须经过\(y = x + i\)的路径条数,这是格路问题的经典问题,不难得到答案是\(\binom{N+M}{M - i}\)

那么当\(N > M\)\(Ans = \sum\limits_{i=1}^M \binom{N + M}{M - i} = \sum\limits_{i=0}^{M - 1} \binom{N + M}{i}\),当\(N \leq M\)\(Ans = M - N + \sum\limits_{i=0}^{N - 1} \binom{N + M}{i}\)

那么如果我们可以快速求出\(f(x,y) = \sum\limits_{i=0}^x \binom{y}{i}\)就可以快速求解。

注意到这是一个二元组询问,似乎不能直接做,不妨考虑莫队。那么我们需要在知道\(f(x,y)\)\(O(1)\)求出\(f(x,y \pm 1)\)以及\(f(x \pm 1,y)\)。后者可以直接做,对于前者可以使用\(\binom{y}{x} = \binom{y - 1}{x} + \binom{y - 1}{x - 1}\)得到一种\(O(1)\)的转移方法。

代码

posted @ 2019-05-24 19:59  cjoier_Itst  阅读(349)  评论(0编辑  收藏  举报