组合数学

容斥

折线法

定义变换 为关于直线 镜射(轴对称)。

两条直线

感觉骗我呢题解里说的似乎不是很易于理解(不过这里也可能不怎么好理解就是了)。

考虑如下问题:如图,记录点 到点 的路径条数,要求不能碰到直线 或者 平面直角坐标系

先考虑对路径编号。我们一次写下路径与哪条直线相交(与 相交就写下 ,与 相交就写下 ),对于连续的一段 ,我们只保留其中一个。 考虑一条路径。如下图所示。 这条直线先与 个交点,然后与 个交点。依次写下来,就是 ,连续的两个 只保留 个,最后我们将其记作

显然所有的路径都可以编号为一个 交替出现的序列,记这个序列为 。令 为以 为前缀的路径条数。显然,最后符合条件的路径个数就是 考虑计算。先来考虑 。仿照一条直线的情况,我们取和 的第一个交点,将这之后的路径关于 镜射。另 。计算 的路径条数,这个就是从 并且至少碰到一次 的条数。注意,我们只考虑了至少碰到 次,而没有保证第一次就碰到 。考虑路径在和 第一次相交之前的部分。

  • 之前的部分和谁都没有相交。也就是说,第一次碰到的就是 。这类路径的个数就是
  • 根据定义,这部分路径是在和 第一次相交之前。因此显然不可能和 相交。
  • 之前的部分和 相交了。此类路径的条数是 。下图就是其中一条:

因此,这样算出来的路径条数实际上是 。因此我们需要减去

我们可以考虑找到路径中第一次 出现的位置(注意,不是第一次和 相交也不是第一次和 相交),先将重点关于 镜射,再关于 镜射得到 ,计算 的路径条数。和上面一样,由于我们不知道之前是否与两条直线相交过,因此这样算出来的路径条数实际上是

继续镜射,直到某个时刻镜射后的点 不再第一象限内,此时路径条数就是 。然后将其一路回带,就可以算出 的值。 也是类似的流程,不再赘述。对于 的情况,复杂度为

斯特林数

第一类斯特林数


组合数学
https://blogs.sving1024.top/posts/55396/
发布于
2025年6月24日
许可协议