bzoj 2839: 集合计数 排列组合+容斥原理
来源:互联网 发布:医疗器械销售公司知乎 编辑:程序博客网 时间:2024/05/14 17:05
题意
一个有N个元素的集合有2^N个不同子集(包含空集),现在要在这2^N个集合中取出若干集合(至少一个),使得它们的交集的元素个数为K,求取法的方案数,答案模1000000007。(是质数喔~)
n<=1000000
分析
首先我们枚举交集元素,方案显然为
代码
#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>using namespace std;typedef long long LL;const int N=1000005;const int MOD=1000000007;int n,k,jc[N],ny[N];int ksm(int x,int y,int mo){ int ans=1; while (y) { if (y&1) ans=(LL)ans*x%mo; x=(LL)x*x%mo;y>>=1; } return ans;}int C(int n,int m){ return (LL)jc[n]*ny[m]%MOD*ny[n-m]%MOD;}int get(int s){ int x=ksm(2,s,MOD-1); return ksm(2,x,MOD)-1;}int main(){ scanf("%d%d",&n,&k); jc[0]=ny[0]=1; for (int i=1;i<=n;i++) jc[i]=(LL)jc[i-1]*i%MOD,ny[i]=ksm(jc[i],MOD-2,MOD); LL ans=0; for (int i=0;i<=n-k;i++) if (i%2==0) (ans+=(LL)C(n-k,i)*get(n-k-i))%=MOD; else (ans-=(LL)C(n-k,i)*get(n-k-i))%=MOD; ans=(LL)ans*C(n,k)%MOD; if (ans<0) ans+=MOD; printf("%lld",ans); return 0;}
阅读全文
0 0
- bzoj 2839: 集合计数 排列组合+容斥原理
- BZOJ 2839 集合计数 容斥原理
- [容斥原理] BZOJ 2839 集合计数
- [容斥原理]BZOJ 2839: 集合计数
- bzoj 2839: 集合计数 (容斥原理)
- BZOJ 2839: 集合计数 容斥原理 组合数学
- 容斥原理 集合计数
- 【BZOJ2839】集合计数,容斥原理
- bzoj2839集合计数 容斥原理
- bzoj 4710: [Jsoi2011]分特产 排列组合+容斥原理
- bzoj1042(排列组合、容斥原理)
- BZOJ 2839 浅谈容斥原理组合计数及欧拉定理优化二维幂指数
- [BZOJ2839]集合计数(容斥原理+组合数学)
- bzoj2839 集合计数 (容斥原理+组合数)
- bzoj 2839 集合计数
- BZOJ 2839 集合计数
- bzoj 2839 集合计数
- [DP][容斥原理] BZOJ 4762: 最小集合
- NYOJ-ACM-Coin Test
- C 之 文件加解密
- 内容提供者——添加联系人
- 使用 Eclipse 远程调试 Java 应用程序
- GKSphereObstacle
- bzoj 2839: 集合计数 排列组合+容斥原理
- Json工具类--使用1.x版本Jackson实现json的序列化和反序列化
- Error:Execution failed for task ':app:processDebugManifest'. > com.android.manifmerger.ManifestMerge
- [Good]Python必会的单元测试框架 —— unittest
- 比较两个List里的值是否相等
- Linux命名--kill和pkill命令的区别
- Framework学习(三)SystemServer进程启动过程
- Codeforces 847 H. Load Testing (技巧)
- QTableView和QTableWidget翻页功能实现