QOJ 5039 Black and White 题解

链接


一个白格的权值定义为 \(1\) ,黑格定义为 \(-1\) 。题目所求相当于路径左上角所有格子权值和 \(=k\) 方案数。

首先把左上角改成右下角。所带来的影响是 \(k\leftarrow S-k\) ,其中 \(S\) 为所有格子的权值和。容易发现 \(S=(n\bmod 2)\times (m\bmod 2)\)

然后发现题目等价于这个问题:求整数序列 \(\{x\}\) 的方案数,要求满足:

  1. 序列长度为 \(n\)

  2. \(0\le x_1\le x_2\le\dots\le x_n\le m\)

  3. 定义 \(f(i)=x_i\bmod 2\) ,记奇数位置的 \(f\) 值和为 \(A\) ,偶数位置的 \(f\) 值和为 \(B\),则要求 \(A-B=k\)

假如已经确定所有了 \(f\) ,记 \(p=\sum [f(i)\not=f(i+1)]\)(这里为了方便思考可以假装 \(x_0=0\)\(x_{n+1}=m\) ),则发现方案数只和 \(p\) 有关,是个关于 \(p\) 的组合数。

发现 \(A-B\) 这个东西很恶心,所以考虑假装每个偶数位置的 \(f(i)=1\) ,奇数位置 \(f(i)=0\) ,此时每取反一个位置就会使 \(A-B\) 加一,就可以钦定若干个位置然后计算 \(p\) 。记 \(g(i)\) 表示 \(i\) 这个位置是否取反,发现 \(p\) 的值会变当且仅当 \(g(i)\not=g(i+1)\) 。考虑枚举 \(g\) 构成了多少个连续段,就能直接计算 \(p\) ,然后统计答案。要特判开头/结尾。

细节看 代码

posted @ 2024-04-28 13:32  Z_301  阅读(9)  评论(0)    收藏  举报