2839: 集合计数

Time Limit: 10 Sec  Memory Limit: 128 MB
Submit: 495  Solved: 271
[Submit][Status][Discuss]

Description

一个有N个元素的集合有2^N个不同子集(包含空集),现在要在这2^N个集合中取出若干集合(至少一个),使得
它们的交集的元素个数为K,求取法的方案数,答案模1000000007。(是质数喔~)

Input

一行两个整数N,K

Output

一行为答案。

Sample Input

3 2

Sample Output

6

HINT

【样例说明】

假设原集合为{A,B,C}

则满足条件的方案为:{AB,ABC},{AC,ABC},{BC,ABC},{AB},{AC},{BC}

【数据说明】

对于100%的数据,1≤N≤1000000;0≤K≤N;

  一开始想到的状态数组是f[i],代表我们取交集共选了i个数,但是转移还要去枚举有几个集合,好像挺不靠谱的……
  一看正解,连状态数组都不用,让我想到了10.9考试 第一题建造城市的打法。
  我们同样,先从n个数里提前选出k个数,然后去枚举多出来的集合的交集至少是多少,仍然奇减偶加,假设我们当前要求的是交集多出至少为x的方案数,那么就是:
    (2^(2^(n-k-x))-1)*C(n-k,x)。
  在(2^(2^(n-k-x))-1)即表示在除去k+x个数后的2^(n-k-x)集合中选集合的方案数,由于我们不能一个都不选,所以还得减去全部不选的情况。C(n-k,x)就是在剩下n-k个数中选出x个数的方案数,最后在将总和乘以在n个数中选k个数的方案数。
 #include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <queue>
#include <algorithm>
#include <cmath>
#include <map>
#define N 1000005
using namespace std;
int n,k,p=;
long long jc[N],ni[N],xp[N];
long long ksm(long long x,long long z)
{
long long ans=;
while(z>)
{
if(z&)
{
ans*=x;
ans%=p;
}
x*=x;x%=p;
z>>=;
}
return ans;
}
int main()
{
scanf("%d%d",&n,&k);
jc[]=;xp[]=;
for(int i=;i<=n;i++)
{
jc[i]=(jc[i-]*i)%p;
xp[i]=(xp[i-]*)%p;
}
ni[n]=ksm(jc[n],p-);
for(int i=n-;i>=;i--)ni[i]=(ni[i+]*(i+))%p;
ni[]=;long long now=;
long long ans=;
for(int i=n-k;i>=;i--)
{
long long tmp=((((now-)*jc[n-k]%p)*ni[i]%p)*ni[n-k-i])%p;
if(i&)ans=(ans-tmp+p)%p;
else
{
ans+=tmp;
ans%=p;
}
now*=now;
now%=p;
}
ans*=((jc[n]*ni[k])%p*ni[n-k])%p;
ans%=p;
printf("%lld\n",ans);
return ;
}

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 集合计数 容斥\广义容斥

    LINK:集合计数 容斥简单题 却引出我对广义容斥的深思. 一直以来我都不理解广义容斥是为什么 在什么情况下使用. 给一张图: 这张图想要表达的意思就是这道题目的意思 而求的东西也和题目一致. 特点: ...

  4. ●BZOJ 2839 集合计数

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

  5. [BZOJ 2839]集合计数

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

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

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

  7. bzoj 2839 集合计数——二项式反演

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2839 设 \( g(i) \) 表示至少有 i 个, \( f(i) \) 表示恰好有 i ...

  8. bzoj 2839 集合计数 —— 二项式反演

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2839 设 \( f(i) \) 为至少 \( i \) 个选择,则 \( f(i) = C_ ...

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

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

随机推荐

  1. WPF下Itemscontrol分组 样式

    原文 WPF下Itemscontrol分组 样式 <ItemsControl Grid.Row="1" DataContext="{Binding Layouts} ...

  2. Gralde 同步失败

    Gralde 同步失败 尝试了各种方法,至少我觉得常见的一些方法我都尝试了.但一直下载依赖失败 > Could not resolve all files for configuration ' ...

  3. Windows10 1607 x64/x86 + Office 2016 Win/Mac + KMS激活/安装密钥汇总

    各位观众,这里汇总了一份最新微软系统和办公软件的资源清单,希望对你们有帮助. Windows10 1607 For x64 ed2k://|file|cn_windows_10_multiple_ed ...

  4. Advanced Installer 安装前卸载旧版本的办法

    原文:Advanced Installer 安装前卸载旧版本的办法 Advanced Installer这个工具百度出来的资料太少了. 在我们平常打包的工作中,经常遇到的一个问题是,如何能在安装新版本 ...

  5. Android零基础入门第55节:ImageSwitcher和TextSwitcher使用

    原文:Android零基础入门第55节:ImageSwitcher和TextSwitcher使用 上一期我们了解了ViewAnimator组件和ViewSwitcher组件的使用,你都掌握了吗?本期一 ...

  6. SpringMVC使用MultipartFile文件上传,多文件上传,带参数上传

    一.配置SpringMVC 二.单文件与多文件上传 三.多文件上传 四.带参数上传 一.配置SpringMVC 在spring.xml中配置: <!-- springmvc文件上传需要配置的节点 ...

  7. Win8下安装MAC OS

    参考: win7下安装OSX10.8及XCODE4.5 http://cleris.diandian.com/VB-Mountain-Lion     1,本机环境: win8  64位, 8G内存. ...

  8. 创业游戏模拟器 Startup 游戏试玩

    买的正版游戏,还在beta阶段.因为对这种经营类的游戏挺感兴趣,结合自己也是做这个行当的.算是一次性通关了吧.我来评价一下这个游戏.足足玩了有5个多小时.从1级玩到15级.解锁了所有的内容.员工从1个 ...

  9. DHCP命令执行CVE-2018-1111漏洞复现

    DHCP命令执行_CVE-2018-1111漏洞复现 一.漏洞描述 在Red Hat Enterprise Linux多个版本的DHCP客户端软件包所包含的NetworkManager集成脚本中发现了 ...

  10. .NET CORE与Spring Boot编写控制台程序应有的优雅姿势

    本文分别说明.NET CORE与Spring Boot 编写控制台程序应有的“正确”方法,以便.NET程序员.JAVA程序员可以相互学习与加深了解,注意本文只介绍用法,不会刻意强调哪种语言或哪种框架写 ...