首页 > 其他 > 详细

[ARC096E] Everything on It

时间:2020-05-12 21:46:11      阅读:91      评论:0      收藏:0      [点我收藏+]

problem

  求有多少个子集族,满足:

  1、其中任意一个子集都是\([n]\)的子集(包括\(\phi\));

  2、任意两个子集互不相同;

  3、\(1,2,...,n\)都在其中至少出现了\(2\)次。

  答案对\(M\)取模。

  \(2\leqslant N\leqslant 3000\)\(10^8\leqslant M\leqslant 10^9+9\)\(M\)是质数。

sol

  (开个随笔记录思路以及细节的)

  由于至少出现2次,而且\(N\)的范围很乐观,我们采用容斥(一般用于不好直接求解答案的大部分用容斥的思想)

  我们以“出现次数小于2次”来进行容斥,先可以大体写出来这个式子

\[ans=\sum_{i=1}^N(-1)^i{N\choose i}f(i) \]

  现在看\(f(i)\)。选出来了\(i\)个数要满足条件,剩余的\(N-i\)个数随便,这\(N-i\)个数构成的集合有\(2^{N-i}\)种,那么可以有\(2^{2^{N-i}}\)种选择方案。回头再来考虑这\(i\)个数怎么选。显然这\(i\)个数要么出现在某一集合中且只出现一次,要么没有出现。这里假定\(i\)个数被分到了\(j+1\)个集合中(+1是单独给没出现的数划的集合),再放入一个标记数字0表示这个数字所在集合为没出现数的集合。那么就是第二类斯特林数\({i+1\brace j+1}\),然后包含这些数的集合中又可以随便塞入其他\(N-i\)数中的任意组合,故每一个集合会带来\(2^{N-i}\)的贡献,总共就是\(2^{j(N-i)}\)。故

\[f(i)=2^{2^{N-i}}\sum_{j=0}^i2^{j(N-i)}{i+1\brace j+1} \]

  综上

\[ans=\sum_{i=1}^N(-1)^i{N\choose i}2^{2^{N-i}}\sum_{j=0}^i2^{j(N-i)}{i+1\brace j+1} \]

  (你似乎来到了一片荒漠)

[ARC096E] Everything on It

原文:https://www.cnblogs.com/ac-evil/p/12878297.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!