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

bzoj2839: 集合计数(容斥原理) 传送门 题意简述:对于一个有N个元素的集合在其2^N个子集中取出若干集合(至少一个),使得它们的交集的元素个数为K,求取法的方案数。 思路:考虑枚举相交的是哪kkk个,有CnkC_n^kCnk​种方案,然后考虑剩下的可选可不选一共有22n−k2^{2^{n-k}}22n−k种选法,但是这样选出来的集合可能有其余的数相交,因此我们容斥掉多余的: ans=Cnk∗∑i=0n−kCni22n−k−ia... 阅读详情

Description

一个集合S有n各元素,要求从2n个子集中选取若干个子集,使得这些子集的并的大小为k。

Solution

因为是恰好为k,可以考虑容斥原理,转化为至少为k。
至少为k的方案数很好统计,就是

(nk)22n−k
。
然后直接容斥就好了。答案就是

∑i=kn(−1)i−k(ik)(ni)22n−i
#include <bits/stdc++.h>
using namespace std;

const int MOD = 1000000007;
const int N = 1010101;
typedef long long ll;

inline char get(void) {
    static char buf[100000], *S = buf, *T = buf;
    if (S == T) {
        T = (S = buf) + fread(buf, 1, 100000, stdin);
        if (S == T) return EOF;
    }
    return *S++;
}
inline void read(int &x) {
    static char c; x = 0;
    for (c = get(); c < '0' || c > '9'; c = get());
    for (; c >= '0' && c <= '9'; c = get()) x = x * 10 + c - '0';
}

int n, k, ans, res;
int ph[N], fac[N], inv[N];

inline void Add(int &x, int a) {
    x += a; while (x >= MOD) x -= MOD;
}
inline int Mod(int x) {
    Add(x, 0); return x;
}
inline int Pow(int a, int b) {
    int c = 1;
    while (b) {
        if (b & 1) c = (ll)c * a % MOD;
        b >>= 1; a = (ll)a * a % MOD;
    }
    return c;
}
inline int C(int n, int m) {
    return (ll)fac[n] * inv[m] % MOD * inv[n - m] % MOD;
}
inline void Pre(int n) {
    inv[1] = 1;
    for (int i = 2; i <= n; i++)
        inv[i] = (ll)inv[MOD % i] * (MOD - MOD / i) % MOD;
    fac[0] = inv[0] = ph[0] = 1;
    for (int i = 1; i <= n; i++) {
        fac[i] = (ll)fac[i - 1] * i % MOD;
        inv[i] = (ll)inv[i - 1] * inv[i] % MOD;
        ph[i] = ph[i - 1] * 2 % (MOD - 1);
    }
}

int main(void) {
    freopen("1.in", "r", stdin);
    read(n); read(k); Pre(n);
    for (int i = k; i <= n; i++) {
        res = (ll)C(n, i) * C(i, k) % MOD * Pow(2, ph[n - i]) % MOD;
        if ((i ^ k) & 1) ans = (ans - res + MOD) % MOD;
        else ans = (ans + res) % MOD;
    }
    cout << ans << endl;
    return 0;
}

使用kmplot在线进行生存分析 欢迎关注”生信修炼手册”!kmplot是一个生存分析的在线工具,最初是设计用来对肝癌中的miRNA进行生存分析,对应的文章发表在scientific reports上,链接如下https... 阅读详情

相关推荐

别再只用CANape测数据了!手把手教你用ASAP2 Studio编辑A2L文件(附MAP文件更新避坑指南)

本文深入探讨ASAP2 Studio在ECU开发中的高阶应用,特别是如何利用其编辑A2L文件并同步更新MAP文件,提升测量标定效率。文章详细解析了ASAP2 Studio的双向同步能力、MAP文件更新全流程及变量管理技巧,帮助工程师避免常见错误,优化工作流程。

weixin_26833939的博客 507

Bzoj2839:集合计数

Bzoj2839:集合计数 题意: 一个有nnn个元素的集合有2n2^n2n个不同子集(包含空集),现在要在这2n2^n2n个集合中取出若干集合(至少一个),使得它们的交集的元素个数为kkk,求取法的方案数,答案模1000000007。 题解: 可以先枚举选取哪k个元素,一共有cnkc_{n}^{k}cnk​种情况,选取kkk个之后还剩下n−kn-kn−k个数字,对于剩下的数字每个可以选或不选一共有2n−k2^{n-k}2n−k种情况,即这么多种集合,对于每一个集合又可以选或不选,那么一共有22n−k2^{

a12377978的博客 765

基于51单片机扫地机器人(全套Proteus仿真+原理图+程序+说明书)

(内含源程序代码,原理图,仿真,讲解视频,元件清单等,【精品】值得推荐!!!扫地机器人是以单片机为主控制器。通过单片机控制小车行驶、除尘、蜂鸣。扫地机器人使用双电机驱动,以提高整车运动的平稳性;在智能车进驶过程中,采用双超声波模块实现避障。

2301_76434107的博客 1894

bzoj2839 集合计数(容斥+组合)

集合计数 内存限制:128 MiB 时间限制:1000 ms 标准输入输出 题目描述 一个有N个元素的集合有2^N个不同子集(包含空集),现在要在这2^N个集合中取出若干集合(至少一个),使得它们的交集的元素个数为K,求取法的方案数,答案模1000000007。(是质数喔~) 输入格式 一行两个整数N,K ...

weixin_30363981的博客 291

麒麟linux离线源码编译安装zabbix-agent

离线源码编译安装zabbix-agent

qq_37263429的博客 2266

74HC138译码器的原理和使用

A0,A1,A2为3位二进制加权地址输入端口,A2A1A0顺序组成的3位2进制数对应的十进制数x控制使能端口Yx';例如当A2A1A0 = 101 时,其他门输出端全为高电平,只有Y5'为低电平。 Y0-Y7为8个输出端口,其输出电平由A0,A2,A3,E1,E2,E3决定。

diksan的博客 6万+

bzoj 2839: 集合计数 排列组合+容斥原理

题意一个有N个元素的集合有2^N个不同子集(包含空集),现在要在这2^N个集合中取出若干集合(至少一个),使得它们的交集的元素个数为K,求取法的方案数,答案模1000000007。(是质数喔~) n<=1000000分析首先我们枚举交集元素,方案显然为CknC_n^k。那么我们选择的集合则必然要包含这k个元素,显然满足条件的集合有2n−k2^{n-k}个,因为集合的数量不固定但不能为0,则选择的方

beginend 661

[BZOJ2839]集合计数

集合计数 题目描述 一个有N个元素的集合有2^N个不同子集(包含空集),现在要在这2^N个集合中取出若干集合(至少一个),使得它们的交集的元素个数为K,求取法的方案数,答案模1000000007。(是质数喔~) 输入格式 一行两个整数N,K 输出格式 一行为答案。 ...

weixin_33982670的博客 1223

java爬虫(爬取银行理财数据)

import java.io.IOException; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; imp

ROCK 2490

lammps模拟石墨烯吸附水分子(gcmc)

本文分享lammps gcmc吸附的一个案例代码,上下壁面的通道材料为石墨烯,吸附的分子为tip4p水分子。大家好,我是小马老师。

lammps_jiayou的博客 2590

【BZOJ 2839】 2839: 集合计数 (容斥原理)

2839: 集合计数 Time Limit:10 SecMemory Limit:128 MBSubmit:399Solved:217 Description 一个有N个元素的集合有2^N个不同子集(包含空集),现在要在这2^N个集合中取出若干集合(至少一个),使得 它们的交集的元素个数为K,求取法的方案数,答案模1000000007。(是质数喔~) ...

weixin_30484247的博客 216

为什么我的OpenClaw安装后无法启动?Gateway服务故障排查全攻略

OpenClaw是一款功能强大的自动化工具,但其安装和运行依赖于多个服务组件,其中Gateway服务是核心组件之一。如果Gateway服务无法启动,整个OpenClaw系统将无法正常运行。本文将详细介绍OpenClaw安装后无法启动的常见原因及故障排查方法,帮助你快速定位并解决问题。

一键难忘的博客 4624

BZOJ 2839: 集合计数 容斥原理 组合数学

2839: 集合计数 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 521  Solved: 285 [Submit][Status][Discuss] Description 一个有N个元素的集合有2^N个不同子集(包含空集),现在要在这2^N个集合中取出若干集合(至少一个),使得它们的交集的元素个数为K,求取法的方案数,答案

BlackJack 749

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

bzoj 2839 : 集合计数 容斥原理

因为要在n个里面选k个,所以我们先枚举选的是哪$k$个,方案数为$C_{n}^k$ 确定选哪k个之后就需要算出集合交集正为好这$k$个的方案数,考虑用容斥原理。 我们还剩下$n-k$个元素,交集至少为$k$的方案数为$2^{2^{n-k}}$。 相当于在仅有剩下$n-k$个元素的集合里随便选,最后再往每个集合里塞进这$k$个元素。 然后就是很简单的容斥了。 减去交集至少为k加上其他...

weixin_30885111的博客 112

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

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

2839: 集合计数 题意:n个元素的集合,选出若干子集使得交集大小为k,求方案数 先选出k个\(\binom{n}{k}\),剩下选出一些集合交集为空集 考虑容斥 \[ 交集为\emptyset = 任意选的方案数-交集\ge 1 的方案数+交集\ge 2的方案数-... \] 交集\(\ge i\)就是说先选出i个元素在交集里,剩下的元素的集合任选 那么就是 \[ \sum_{i=0}^n ...

weixin_33816300的博客 147

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

2019.02.09 bzoj2839: 集合计数(容斥原理)

传送门 题意简述:对于一个有N个元素的集合在其2^N个子集中取出若干集合(至少一个),使得它们的交集的元素个数为K,求取法的方案数。 思路:考虑枚举相交的是哪kkk个,有CnkC_n^kCnk​种方案,然后考虑剩下的可选可不选一共有22n−k2^{2^{n-k}}22n−k种选法,但是这样选出来的集合可能有其余的数相交,因此我们容斥掉多余的: an...

weixin_30478923的博客 83

bzoj 2839: 集合计数 (容斥原理)

题目描述传送门题目大意: 一个有N个元素的集合有2^N个不同子集(包含空集),现在要在这2^N个集合中取出若干集合(至少一个),使得它们的交集的元素个数为K,求取法的方案数题解首先我们 考虑确认出交集中的K个元素,选择的方案数是C(n,k)C(n,k).那么剩下的元素共n−kn-k个,剩下的元素构成的子集是2n−k2^{n-k}我们可以从这些子集中任意选择,然后与选择出的元素拼接到一起形成合法的子

clover_hxy的博客 777

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

首先,考虑容斥,我们所要的答案是并集至少有\( k \)个数的方案数减去并集至少有\( k+1 \)个数的方案数加上并集至少有\( k \)个数的方案数…… 在n个数中选i个的方案数是\( C_{n}^{i} \),n种集合的组合方案数为\( 2^n \) 并集至少有i个元素的方案数即为选\( i \)个元素的方案数\( C_{n}^{i} \),乘上剩下\( n-i \)个元素任意组合的方案数\...

weixin_30825199的博客 236

[BZOJ2839]集合计数(容斥原理+组合数学)

题目描述传送门题解首先考虑固定k个元素,方案为CknC_n^k 还剩下2n−k2^{n-k}个集合,可以任选若干个集合C12n−k+C22n−k+..+C2n−k2n−k=22n−kC_{2^{n-k}}^1+C_{2^{n-k}}^2+..+C_{2^{n-k}}^{2^{n-k}}=2^{2^{n-k}} 但是这样选出来的有可能有不合法的,交集大小可能大于k,所以要减去k+1,加上k+2…

zyf2000 1637

bzoj2839 集合计数

容斥原理

AaronPolaris 4607

bzoj2839 集合计数 (容斥原理+组合数)

bzoj2839 集合计数 原题地址:http://www.lydsy.com/JudgeOnline/problem.php?id=2839 题意: 一个有N个元素的集合有2^N个不同子集(包含空集),现在要在这2^N个集合中取出若干集合(至少一个),使得 它们的交集的元素个数为K,求取法的方案数,答案模1000000007。(是质数喔~) 数据范围 1≤N≤1000000;0≤K≤...

Bfk的博客 831

【BZOJ2839】集合计数 组合数+容斥

【BZOJ2839】集合计数 Description 一个有N个元素的集合有2^N个不同子集(包含空集),现在要在这2^N个集合中取出若干集合(至少一个),使得它们的交集的元素个数为K,求取法的方案数,答案模1000000007。(是质数喔~) Input 一行两个整数N,K Output 一行为答案。 Sample Input 3 2 Samp...

aodanchui1057的博客 186

[BZOJ 2839] 集合计数

题目描述 一个有N个元素的集合有2^N个不同子集(包含空集),现在要在这2^N个集合中取出若干集合(至少一个),使得它们的交集的元素个数为K,求取法的方案数,答案模1000000007。(是质数喔~) 输入格式 一行两个整数N,K 输出格式 一行为答案。 样例 样例输入 ...

weixin_30900589的博客 664

BZOJ2839 集合计数 容斥原理 组合数学

题目链接 这个题是个权限题,我用同学的权限号交的。最近darkbzoj挂掉了,于是只能借权限号来交了。 题意: 一个有nnn个元素的集合有2n2^n2n个不同子集(包含空集),现在要在这2n2^n2n个集合中取出若干集合(至少一个),使得 它们的交集的元素个数为kkk,求取法的方案数,答案模1000000007。n,k&lt;=1e6n,k&lt;=1e6n,k<=1e6 题...

forever_shi的博客 459

[BZOJ2839]集合计数 组合数学+容斥原理

[BZOJ2839] 一个有N个元素的集合有2^N个不同子集(包含空集),现在要在这2^N个集合中取出若干集合(至少一个),使得它们的交集的元素个数为K,求取法的方案数,答案模1000000007。 垃圾套路题 考虑交集元素个数>=k时,ans=C(n,k)*(2^(2^(n-i)) - 1) 2^(2^(n-i))=2^( 2^(n-i)%(mod-1) ) 费马小定理 直接计算...

Shelter 475
上一篇: [DP]BZOJ 4321: queue2
下一篇: [数论]Codeforces 757E. Bash Plays with Functions
Vectorxj
博客等级 码龄11年 35粉丝 231原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值