LINK:集合计数

容斥简单题 却引出我对广义容斥的深思。

一直以来我都不理解广义容斥是为什么 在什么情况下使用。

给一张图:

这张图想要表达的意思就是这道题目的意思 而求的东西也和题目一致。

特点:求出某个集合恰好为k的个数。

转换:求出集合>=k的个数或者<=k的个数 从而使用广义容斥容斥出来答案。

关于>=k个数 如上图可见 又很多重复的地方 而广义容斥也是在这么多重复的地方使用的 而并非严格>=k的个数。

换个说法 >=k的方案数 可能有一些存在重复 但是其特点是>=k 关于这个特点可以利用二进制的子集关系表现出来。

如 S1,S2都是恰好为k的 他们都能生成S3这个==k+1的集合 此时可以发现 S3被S1生成一次 被S2生成一次。所以所谓的>=k的方案数其中有一部分是子集的互相生成重复。

广义容斥就是利用这一点来计算的。

转到题目 不难发现 符合上面定义的>=k方案数为 \(C(n,k)(2^{2^{n-k}}-1)\)

套广义容斥的式子即可求出答案 值得注意的是 \(2^{n-k}\)可以由欧拉定理%(mod-1).

这道题还是一个简单容斥的类型。

可以发现所有的>=k的方案数为 \(C(n,k)(2^{2^{n-k}}-1)\)

此时讨论 关于选出的k个子集固定时 此时生成的方案除掉这k个交集可能还存在其他交集 -1个交集+2个交集-...

这样套简单容斥的式子也行。值得注意的是这个讨论实在k个子集固定时的讨论。

广义容斥 code:

const ll MAXN=1000010,N=17;
ll n,k;
ll fac[MAXN],inv[MAXN];
inline ll ksm(ll b,ll p,ll pp)
{
ll cnt=1;
while(p)
{
if(p&1)cnt=cnt*b%pp;
b=b*b%pp;p=p>>1;
}
return cnt;
}
inline ll C(ll a,ll b){return a<b?0:fac[a]*inv[b]%mod*inv[a-b]%mod;}
signed main()
{
freopen("1.in","r",stdin);
get(n);get(k);fac[0]=1;
rep(1,n,i)fac[i]=fac[i-1]*i%mod;
inv[n]=ksm(fac[n],mod-2,mod);
fep(n-1,0,i)inv[i]=inv[i+1]*(i+1)%mod;
ll ans=0;
rep(k,n,i)
{
ans=(ans+(((i-k)&1)?-1:1)*(C(n,i)*(ksm(2,ksm(2,n-i,mod-1),mod)-1))%mod*C(i,k))%mod;
}
putl((ans+mod)%mod);
return 0;
}

bzoj 2839 集合计数 容斥\广义容斥的更多相关文章

  1. BZOJ 2839: 集合计数 解题报告

    BZOJ 2839: 集合计数 Description 一个有\(N\)个元素的集合有\(2^N\)个不同子集(包含空集),现在要在这\(2^N\)个集合中取出若干集合(至少一个),使得 它们的交集的 ...

  2. BZOJ 2839: 集合计数 [容斥原理 组合]

    2839: 集合计数 题意:n个元素的集合,选出若干子集使得交集大小为k,求方案数 先选出k个\(\binom{n}{k}\),剩下选出一些集合交集为空集 考虑容斥 \[ 交集为\emptyset = ...

  3. Bzoj 2839 集合计数 题解

    2839: 集合计数 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 495  Solved: 271[Submit][Status][Discuss] ...

  4. BZOJ 2839: 集合计数 广义容斥

    在一个 $N$ 个元素集合中的所有子集中选择若干个,且交集大小为 $k$ 的方案数. 按照之前的套路,令 $f[k]$ 表示钦定交集大小为 $k$,其余随便选的方案数. 令 $g[k]$ 表示交集恰好 ...

  5. ●BZOJ 2839 集合计数

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=2839 题解: 容斥原理 真的是神题!!! 定义 f[k] 表示交集大小至少为 k时的方案数怎 ...

  6. bzoj 2839 : 集合计数 容斥原理

    因为要在n个里面选k个,所以我们先枚举选的是哪$k$个,方案数为$C_{n}^k$ 确定选哪k个之后就需要算出集合交集正为好这$k$个的方案数,考虑用容斥原理. 我们还剩下$n-k$个元素,交集至少为 ...

  7. bzoj 2839: 集合计数【容斥原理+组合数学】

    首先,考虑容斥,我们所要的答案是并集至少有\( k \)个数的方案数减去并集至少有\( k+1 \)个数的方案数加上并集至少有\( k \)个数的方案数-- 在n个数中选i个的方案数是\( C_{n} ...

  8. BZOJ 2839: 集合计数(二项式反演)

    传送门 解题思路 设\(f(k)\)为交集元素个数为\(k\)的方案数.发现我们并不能直接求出\(f(k)\),就考虑容斥之类的东西,容斥首先要扩大限制,再设\(g(k)\)表示至少有\(k\)个交集 ...

  9. [BZOJ 2839]集合计数

    Description 题库链接 有 \(2^n\) 个集合,每个集合只包含 \([1,n]\) ,且这些集合两两不同.问有多少种选择方法(至少选一个),使得这些集合交集大小为 \(k\) . \(0 ...

随机推荐

  1. yum仓库管理 yum-config-manager

    yum仓库管理 yum-config-manager   简介 # yum 主要功能是更方便的添加/删除/更新RPM 包,自动解决包的倚赖性问题,便于管理大量系统的更新问题. # yum 可以同时配置 ...

  2. 嗨,This is G-Aurora

    嗨,This is G-Aurora   分享让我们得以持续 在很长一段时间里,自己都是将学习笔记整理到自己的磁盘或者网盘中.大概那个时候还对"开源与分享"不太感冒.但后来越来越觉 ...

  3. HDU-1051/POJ-1065 Wooden sticks 木棍子(动态规划 LIS 线型动归)

    嘤嘤嘤,实习半年多的小蒟蒻的第一篇博客(题解) 英文的: There is a pile of n wooden sticks. The length and weight of each stick ...

  4. 二叉树的镜像(剑指offer-18)

    题目描述 操作给定的二叉树,将其变换为源二叉树的镜像. 解析 先前序遍历这棵树的每个结点,如果遍历到的结点有子结点,就交换它的两个子节点, 当交换完所有的非叶子结点的左右子结点之后,就得到了树的镜像 ...

  5. HTTP前世今生

    HTTP 是浏览器中最重要且使用最多的协议,是浏览器和服务器之间的通信语言.随着浏览器的发展,HTTP 为了能适应新的形式也在持续进化.已经历经0.9,1.0,1.1,2.0等几个阶段, 以及未来的3 ...

  6. CSS 的层叠上下文是什么

    层叠上下文是 HTML 中的一个三维的概念,每个层叠上下文中都有一套元素的层叠排列顺序.页面根元素天生具有层叠上下文,所以整个页面处于一个“层叠结界”中. 层叠上下文的创建: 页面根元素:html z ...

  7. python PEP8开发规范

    为了使得代码更美观,方便阅读,建议遵循下PEP8规范 每行长度最大不要超过79. 换行可以使用反斜杠,换行点要在操作符的后面敲回车. 类个top-level函数定义之间空两行:类中的方法定义之间空一行 ...

  8. Prometheus + Grafana 监控(mysql 和redis)

    1.监控MySQL(mysqld-exporter) https://github.com/prometheus/mysqld_exporter/releases/download/v0.11.0/m ...

  9. JavaScript图形实例:平面镶嵌图案

    用形状.大小完全相同的一种或几种平面图形进行拼接,彼此之间不留空隙.不重叠地铺成一片,就叫做这几种图形的平面镶嵌. 1.用一种多边形实现的平面镶嵌图案 我们可以采用正三角形.正方形或正六边形实现平面镶 ...

  10. OSCP Learning Notes - Post Exploitation(2)

    Windows Post Exploitation Target Server: IE8-Win 7 VM 1. Download and upload the fgdump, PwDump7, wc ...