9-30
AT_arc102_c
非常好的容斥题。
首先我们显然要枚举不能等于的点数 \(x\),然后发现两个筛子点数 \(\ne x\) 并不好做。
接下来的推导都是在我们确定 \(x\) 的情况下的。
考虑将限制转化为不存在任意筛子组合的 \((p, x - p)\),满足 \(1 \le p \le x - p \le k\),根据列出的不等式,容易发现整数对的个数为 \(y = \left \lfloor x / 2 \right \rfloor - \max(x - k, 1) + 1\) 个。
这题的妙处就在于它是对不满足条件的对数(相同的算作一对)容斥。也就是我们不在乎整数对内部具体地数值,只在乎他们的对数。这样做的好处是后面可以方便地计算他们的方案数。
然后计算至少 \(i\) 对的组合的方案数设为 \(g_i\),则显然从 \(y\) 种数对中选择 \(i\) 对的方案数为 \(\binom{y}{i}\),剩下有 \(n - 2i\) 个数,因为是容斥,有至少的限制,所以剩下的可以任意分配。考虑插空法,就是将 \(n - 2i\) 个无差别的筛子分为 \(k\) 组,每组可以空,于是方案数为 \(\binom{n - 2i + k - 1}{k - 1}\)。
我们得出 \(g_i = \binom{n - 2i + k - 1}{k - 1}\)。考虑其容斥系数为 \((-1)^i\),将 \(g_i\) 相加。我们就得出了对于每个 \(x\) 的答案。
CF53E
简单题,难点在于如何去重。显然可以按照加入顶点从小到大,然后用状压 DP 就可以了。
AT_arc106_e
比较难想到的一个题。考虑二分答案,发现很难去规划每一枚奖牌的分配。但是注意到一枚奖牌只能分配给一个人,于是考虑建立二分图。将左部点看成人,右部点看成时间。
然后相当于判断是否能够左部点完美匹配。想到 Hall 定理,显然枚举左部点因为 \(n \le 18\),\(O(2^n)\) 可以接受。设当前的左部点集合为 \(S\)。发现只要和左部点有交的右部点就能算上。
然后有交这个东西很难求,但是我们可以考虑取左部点的补集。考虑补集对应的右部点的集合,发现若一个右部点对应的左部点的集合若完全包含于这个补集,那这个右部点是不能取的。
于是我们先预处理每个右部点对应的左部点的集合 \(d\),再通过子集多维前缀和计算每个左部点的集合对应的包含的右部点的集合的大小 \(sum\)。注意,此处是完全包含。然后按照上述的思路,枚举每个左部点的集合,利用 Hall 定理判定即可。
一开始做的时候是有一个疑问的,但是考虑到 \(sum\) 的定义为完全包含的右部点的集合大小,因此一开始 \(sum\) 的初始值就是 \(d\)。

浙公网安备 33010602011771号