反射容斥
反射容斥
单线反射
问题:平面直角坐标系从 \((0,0)\) 走到 \((n,m)\),每次向右或向上走一步,不触碰直线 \(y=x+b\) 的方案数。
考虑容斥,用总方案数减去触碰直线的方案数。总方案数显然是 \(\binom{n+m} n\)。
点 \((n,m)\) 关于直线 \(y=x+b\) 的对称点是 \((m-b,n+b)\),对于每条不合法路径,将其从第一次触碰直线的位置及以后的路径全部关于直线对称,发现每条不合法路径与 \((0,0)\) 到 \((m-b,n+b)\) 的路径一一对应,所以不合法路径数就是 \((0,0)\) 到 \((m-b,n+b)\) 的路径数 \(\binom{n+m}{n+b}\)。
双线反射
问题:平面直角坐标系从 \((0,0)\) 走到 \((n,m)\),每次向右或向上走一步,不触碰直线 \(y=x+b\) 和 \(y=x+c\) 的方案数。
不妨设 \(c\leq b\),仍然考虑容斥,根据上文初步的猜测答案是总方案书减去关于两个直线的对称点的方案数,但是发现问题在于无法保证在触碰某直线前不触碰另一条直线。
设 \(f(S)\) 表示钦定路径根据 \(S\) 内的先后顺序触碰直线的路径数。例如 \(f(b)\) 就表示触碰 \(y=x+b\) 的方案数即 \(\binom{n+m}{n+b}\);\(f(cb)\) 就表示先触碰 \(y=x+c\) 在触碰 \(y=x+b\) 的方案数,即将 \((n,m)\) 先对 \(c\) 对称再对 \(b\) 对称后的路径数。那么我们初步认为答案是 \(f(\emptyset)-f(b)-f(c)\),结果发现 \(f(cb)\) 也会被 \(f(b)\) 多算到,同理 \(f(bc)\) 会被 \(f(c)\) 多算到,以此类推。所以真正的答案是 \(f(\emptyset)-f(b)-f(c)+f(bc)+f(cb)-f(bcb)\cdots\),理论上有无穷项,但是如果 \((n,m)\) 被对称到第一象限以为路径数就一定是 \(0\) 了,所以项数是 \(O(\dfrac{n+m}{b-c})\) 的。
事实上大部分情况到这里就够用了,但是我们还可以深入推一下更好看的式子。
首先需要解决对称问题,考虑一个点 \((x,y)\) 依次关于直线 \(y=x+a_i\) 对称,令 \(S=\sum (-1)^{i-1}a_i\),如果对称奇数次 答案为 \((y-S,x+S)\),偶数次为 \((x+S,y-S)\)。这个容易手模几项就发现规律了。所以最终点坐标关于先对称 \(b,c\) 和对称次数的奇偶性有四个通项,例如先对称 \(b\) 奇数次就是 \((m-b-\frac{k-1}2(b-c),n+b+\frac{k-1}2(b-c))\)。
首先钦定 \(|S|>0\) 因为 \(|S|=0\) 时是不分先对 \(b\) 还是 \(c\) 对称的。
最终答案是 \(\binom{n+m}{n}+\sum_S (-1)^{|S|}f(S)\)。根据 \(S\) 的贡献系数考虑不同 \(S\) 的贡献。
当 \(|S|=2r+1\) 时对答案的贡献为:
当 \(|S|=2r\) 时贡献为:
最终式子为 \(\sum_{r\in\mathbb{Z}}\binom{n+m}{n+r(b-c)}-\binom{n+m}{n+b+r(b-c)}\)。
这个确实没啥用,但是可能也有点用,关注于组合数下指标是公差为 \((b-c)\) 的等差数列,从这点入手可能有点用处。
具体的对于 这道题 好像就用到了,但是这道题我还不是很会,不知道咋用。

浙公网安备 33010602011771号