7.3 CW 模拟赛 T4. 障碍排列
思路
首先考虑确定情况下的处理, 发现基本没办法应用到不确定情况下
考虑另外一种做法, 对于一条路径, 其在哪些情况下产生贡献?
这个问题等价于:
设 \(S\) 为任意一条从 \((0, 0)\) 到 \((n+1, n+1)\) 的路径经过的点集, \(P\) 为 任意一种 合法障碍点集, \(Q\) 为 题目给定的 障碍点集
显然现在 \(S\) 和 \(P\) 都不确定, 题目即求 \(\displaystyle \sum\limits_S \sum\limits_P [S \cap P = \varnothing]\)
不难发现无论是 \(S\) 亦或 \(P\) 都没有办法简单枚举
但是 \(S\) 作为路径, 是可以 \(\rm{dp}\) 处理的
考虑问题等价于求 \(\displaystyle \sum\limits_S \sum\limits_P [S \cap P \neq \varnothing]\)
这个如何计算呢?
考虑到对于一条路径, 如果我们强制钦定其走过的一个点是非法点, 是可以计算出满足这个条件的排列数量的
但是这样子, 一个走过两个非法点的路径会被计算两次, 于是容斥去重即可
因为每次只能向下向右走, 可以很方便的处理当前行/列是否存在非法点, 容斥只需要点集大小即可, 然后就做完了
总结
这类存在不确定位置的问题, 往往转化成一个情形能产生多少贡献来处理
这题的容斥很玄, 大概是直接枚举 \(S \cap P\) 的子集这样, 神奇