反射容斥学习小记

常见形式为从 \((0,0)\) 出发可以向右上和右下走,求走到 \((n,m)\) 且不碰到 \(y=a\)\(y=b\)\(a \lt 0 \lt b\))的方案。

记事件 \(A\) 为触碰到 \(y=a\)\(B\) 同理,那么大概就是要把一个触碰事件非空的给容斥掉。

考虑记形如 \(f(ABAB)\) 的为钦定按某种顺序发生触碰事件的路径数,那么

\[f(\emptyset)-f(A)-f(B)+f(AB)+f(BA)-f(ABA)-f(BAB)+\cdots \]

即为答案,证明形如集合容斥。

\((n,m)\) 经过 \(A\) 事件 \(\to\) \((n,2a-m)\)

\((n,m)\) 经过 \(B\) 事件 \(\to\) \((n,2b-m)\)

\((n,m)\) 经过 \(AB\) 事件 \(\to\) \((n,2b-2a+m)\)

\((n,m)\) 经过 \(BA\) 事件 \(\to\) \((n,2a-2b+m)\)

于是可以统一表示为

\[\begin{aligned} & g(n,m)-g(n,2a-m)-g(n,2b-m)+g(n,2b-2a+m)+g(n,2a-2b+m)+\cdots \\ = & (\sum_i g(n,m+2i(a-b))) - (\sum_i g(n,2i(a-b)-m+2a)) \end{aligned} \]

要想 \(g(n,x)\) 有值,则 \(|x|\)\(O(n)\),故 \(i\) 的取值只有 \(O(\frac {n} {b-a})\),若对 \((n,a+1) \sim (n,b-1)\) 都求一遍时间复杂度为 \(O(n)\)

posted @ 2026-01-06 16:42  lnw143  阅读(5)  评论(0)    收藏  举报