题解 P4931 【情侣?给我烧了!(加强版)】
TimeTraveller · · 题解
先
之前的弱化版的我们直接用一个
我们先算出刚好
前面的刚好
- 选
k 排座位C_n^k - 选
k 对情侣C_n^k - 这
k 对每排可以交换坐2^k - 这
k 排可以任意排列k!
所以前半部分的答案就为
那么对于错排部分,我们模仿错排递推的推导过程分类考虑,我们令
首先我们看第一排坐两个不是情侣的人,不难发现,那么可以有
- 坐在一起:就是在剩下的
n-1 排中任选一排,且这个两个人可以交换,然后就转化为子问题g[n-2] ,所以贡献为2\times (n-1)\times g[n-2] - 不坐在一起,我们就把他们又看作一个不能在一起的错排问题,于是贡献为
g[n-1]
和错排公式结合起来,所以这部分的方案数贡献为
那么答案就是
预处理阶乘和阶乘逆元还有
复杂度为
其中的
代码太丑就不放上来了