主题链接:

http://acm.zju.edu.cn/onlinejudge/showProblem.do?

problemId=4535

How Many Sets I


Time Limit: 2 Seconds      Memory Limit: 65536 KB


Give a set S, |S| = n, then how many ordered set group (S1, S2, ..., Sk) satisfies S1 ∩ S2 ∩ ... ∩ Sk =
∅. (Si is a subset of S, (1 <= i <= k))

Input

The input contains multiple cases, each case have 2 integers in one line represent n and k(1 <= k <= n <= 231-1), proceed to the end of
the file.

Output

Output the total number mod 1000000007.

Sample Input

1 1
2 2

Sample Output

1
9

Author: QU, Zhe

Contest: ZOJ Monthly, October 2011

Submit    

problemId=4535" style="color:blue; text-decoration:none">Status

题目意思:

已知|S|=n。给定k,求S1 ∩ S2 ∩
... ∩ Sk = ∅,当中Si是S的子集(i<=k)的种数。

n,k<=2^31-1

解题思路:

容斥原理

反向考虑。如果S1 ∩ S2 ∩
... ∩ Sk 不等于 ∅。则至少存在一个元素S1。S2。...,Sk都包括。

枚举都包括的元素.总的种数为(2^n)^k=2^(nk)

假设至少都包括一个元素,则种数为C(n,1)*(2^(n-1))^k=C(n,1)*2^((n-1)k)

假设至少都包括两个元素,则种数为C(n,2)*(2^(n-2))^k=C(n,2)*2^((n-2)k)

假设至少都包括i个元素,则种数为C(n,i)*(2^(n-i))^k=C(n,i)*2^((n-i)k)

减去包括一个的加上包括两个的减去包括3个的,如此类推。能够得出一下公式:

2^(nk)+C(n,1)*2^((n-1)k)-C(n,2)*2^((n-2)k)+...(-1)^i*C(n,i)*2^((n-i)k)+.....=(2^k-1)^n
 (通过二项式公式)

所以答案转化为求(2^k-1)^n了,直接高速幂就可以。

代码:

//#include<CSpreadSheet.h>

#include<iostream>
#include<cmath>
#include<cstdio>
#include<sstream>
#include<cstdlib>
#include<string>
#include<string.h>
#include<cstring>
#include<algorithm>
#include<vector>
#include<map>
#include<set>
#include<stack>
#include<list>
#include<queue>
#include<ctime>
#include<bitset>
#include<cmath>
#define eps 1e-6
#define INF 0x3f3f3f3f
#define PI acos(-1.0)
#define ll __int64
#define LL long long
#define lson l,m,(rt<<1)
#define rson m+1,r,(rt<<1)|1
#define M 1000000007
//#pragma comment(linker, "/STACK:1024000000,1024000000")
using namespace std; LL n,k; LL quick(LL a,LL b)
{
LL res=1; while(b)
{
if(b&1)
res=(res*a)%M;
b>>=1;
a=a*a%M;
}
return res;
} int main()
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
while(~scanf("%lld%lld",&n,&k))
{
LL ans=(quick(2,k)-1+M)%M; ans=quick(ans,n); printf("%lld\n",ans);
}
return 0;
}

最新文章

  1. Linux(十)___iptables防火墙
  2. iOS之设置头像(访问系统相册、本地上传)
  3. Linux中的命令 make -f 是什么意思
  4. socket初始
  5. JAVA 常用框架和工具
  6. html5新特性之拖放
  7. [stm32] STM32 Interrupts and events 系统了解(EXTI)及槽型光电开关tp850电路研究
  8. Vmware安装与VMware下Linux系统安装
  9. ubuntu14.04LS中安装SSH
  10. Educational Codeforces Round 15 套题
  11. uva 10366 Faucet Flow
  12. 汽车Vin码识别技术的由来到发展
  13. 最强PostMan使用教程(1)
  14. 04_Javascript初步第三天
  15. 原生javascript 的MAP使用
  16. PCB设计基本流程
  17. MUI手势锁
  18. 算法入门及其C++实现
  19. byte以及UTF-8的转码规则
  20. top 动态查看进程

热门文章

  1. [转]Linux(centOS6.5)下SVN的安装、配置及开机启动
  2. 关于负数的isdigit()判断
  3. awk 工具简介NF-NR
  4. 教你在mac上配置adb环境变量
  5. WCF技术剖析之二十四: ServiceDebugBehavior服务行为是如何实现异常的传播的?
  6. cairo graphics.org
  7. 泛虚拟化技术(以Xen为例)
  8. Android layoutInflate.inflate 方法具体解释,removeView()错误解决
  9. JSP 网页格式判定执行哪一块html
  10. winform 防止主界面卡死