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

题意:

给一套S,| S | = n,则有序集合组(S1,S2,...,Sk)满足S1∩S2∩...∩Sk =∅。 (Si是S的子集,(1 <= i <= k))

输入包含多种情况,每种情况在一行中有2个整数表示n和k(1 <= k <= n <= 2^31-1),继续到文件的末尾。

输出总数mod 1000000007

思路:

md这个题直接是恶心的我快吐了、、、、推了一上午的式子(还是看着别人的博客,唉)我们先直接上公式,然后我们再来推一下
由于集合可以重复被选,所以总的数目是2^(kn)
然后选中的集合都包含x这个元素的数目是C(n,1)*2^(n-1)k
选中的集合包含x1,x2的数目是C(n,2)*2^(n-2)k            ……
所以满足的集合的个数res=2^kn-C(n,1)*2^(n-1)k+C(n,2)*2(n-2)k-……推出的公式为(2^k-1)^n先看这个题,让我们求没有交集的集合的个数。我们是不是可以先求出来组成的集合总个数,然后再减去有交集的元素的个数??当然,这样我们就可以轻松的想到容斥原理了。
我们用总的-有一个元素相同的+有两个元素相同的-有三个元素相同的+有四个元素相同的、、、、、、(有人又会问了,直接全减去不就行吗?为什么还要这么麻烦?!是,这样虽然简单,好像有重复的集合吧、、、、)然后我们接下来的任务就是推这个全部集合的个数,以及有一个交集,有两个交集、、、、的集合个数。先看全部的吧,总个数为2^(n*k),怎么来的??我们现在有n个元素我们要把他们组成集合,现在我们对于每一个元素是不是就有两种情况,选与不选。那样的话我们是不是就会组出2^n个集合,其实我们可以手推一下一个比较小的样例: 1 2 3   这样我们对于这三个数选为1,不选为0。 这样我们就有这几种可能(有序的)0 0 0  0 0 1  0 1 0  0 1 1  1 0 0  1 0 1  1 1 0  1 1 1看一下是不是就正好等于2^3??然后我们要选k个集合,对于每一个集合我们都有2^n种选择(因为我们总共就有2^n个集合嘛),我们要选k个集合这样的话对于每选一个我都有2^n个选择,那么以前的集合选那个数,这个集合选这个数的几率不就是这两种选择的个数相乘吗,也就是说我们是不是就是k个2^n相乘那不就是2^(n*k).(这里的元素可重复且为有序)好,总的解决了,剩下的就是重复的了。我们先来解决只有一个元素重复的情况。我们知道有一个元素重复,但又不知道是哪个,这是我们选中一个元素的几率恰好等于从n个元素中选出一个元素的选法,也就是等于c(n,1)这样我们已经确定下这个集合中的一个元素了在乘上其他集合的选择方案数就好了。这时由于我们已经有一个元素被选出来了,那么我们剩下的元素个数就为n-1这是我们在组成的集合数就变成了(2^(n-1))个,最后我们进行处理,跟上面一样,我们要选k个集合,每一种的集合被选择的可能都是(2^(n-1))k个相乘也就变成了(2^(n-1))^k*c(n,1)其他的什么有两个元素相同,三个元素相同、、、、跟上面的相同,我在这里就不写了这样我们把该处理的都处理了,剩下的我们在使用容斥原理,最后化简。
2^kn-C(n,1)*2^(n-1)k+C(n,2)*2(n-2)k-……——>ans=(2^k-1)^n;(根据二项式公式,得出最后结果为(2^k-1)^n;)不会二项式定理的转;http://baike.sogou.com/v545254.htm?fromTitle=%E4%BA%8C%E9%A1%B9%E5%BC%8F%E5%AE%9A%E7%90%86
注意这解决上面的问题是我们要采用快速幂取模版。(其实你可以选择不用,试试会不会T成狗啊、、、、)

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
#define mod 1000000007
using namespace std;
ll n,k,ans;
ll qpow(ll n,ll k)
{
    ll ans=;
    while(k)
    {
        ) ans=(ans*n)%mod;
        n=(n*n)%mod;
        k=k>>;
    }
    return ans;
}
int main()
{
    while(scanf("%lld%lld",&n,&k)!=EOF)
    {
        ans=qpow(2LL,k);
        ans=qpow(ans-,n);
        printf("%lld\n",ans%mod);
    }
    ;
}

zoj——3556 How Many Sets I的更多相关文章

  1. [容斥原理] zoj 3556 How Many Sets I

    主题链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do? problemId=4535 How Many Sets I Time Limit: 2 ...

  2. ZOJ 3556 How Many Sets I

    How Many Sets I Time Limit: 2 Seconds      Memory Limit: 65536 KB Give a set S, |S| = n, then how ma ...

  3. zoj 3557 How Many Sets II

    How Many Sets II Time Limit: 2 Seconds      Memory Limit: 65536 KB Given a set S = {1, 2, ..., n}, n ...

  4. zoj——3557 How Many Sets II

    How Many Sets II Time Limit: 2 Seconds      Memory Limit: 65536 KB Given a set S = {1, 2, ..., n}, n ...

  5. ZOJ 3556

    终于做出来了,激动.... 这道题隐藏得深啊,但若推导下来,就变简单了. 首先,一个集合的子集的个数为2^n=s.注意了,题目求的是有序集合组,并且每个集合是可以重复使用的,怎么办呢?这就要想到多重集 ...

  6. How Many Sets I(容斥定理)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3556 How Many Sets I Time Limit: 2 ...

  7. 组合数们&&错排&&容斥原理

    最近做了不少的组合数的题这里简单总结一下下 1.n,m很大p很小 且p为素数p要1e7以下的 可以接受On的时间和空间然后预处理阶乘 Lucas定理来做以下是代码 /*Hdu3037 Saving B ...

  8. zoj How Many Sets I(组合计数)

    http://acm.zju.edu.cn/onlinejudge/showProblem.do? problemId=4535 一个集合s有n个元素,求满足这种集合序列{s1,s2....sk}使S ...

  9. ZOJ 1586 QS Network (最小生成树)

    QS Network Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu Submit Sta ...

随机推荐

  1. Spring加载applicationContext.xml实现spring容器管理的几种方式

    package com.etc.test; import org.junit.Test; import org.springframework.beans.factory.BeanFactory; i ...

  2. uiautomatorviewer详解

    一,uiautomatorviewer是什么? Android 4.1发布的,uiautomator是用来做UI测试的.也就是普通的手工测试,点击每个控件元素 看看输出的结果是否符合预期.比如 登陆界 ...

  3. Farseer.net轻量级开源框架 入门篇:逻辑层的选择

    导航 目   录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 入门篇: 入门篇:增.删.改.查操作演示 下一篇:Farseer.net轻量级开源框架 入门 ...

  4. bootstrap插件bootbox参数和自定义弹出框宽度设置

    插件官方地址:http://bootboxjs.com/ alert: 1 bootbox.alert("Hello world!", function() {}); dialog ...

  5. UI开发模式-容器模式

    UI开发模式-容器模式 通用容器: 配置容器.

  6. 安卓app测试之内存监控

    一.通过Dumpsys 来取值 1.adb shell dumpsys meminfo 获取的所有进程的内存信息,以及总内存,剩余内存,使用的内存等信息. 2.想获得某一进程内存的详细信息,在后面加上 ...

  7. 微信小程序 客服自动回复图片

    产品需求是,在客服对话框里,发送特定的文字,回复我们的二维码: 小城程开发完成后,这个自动回复图片的功能就摆在了眼前.刚开始我们想到的是:在线客服功能的设置里设置好自动回复的图片,但是目前设置不支持自 ...

  8. 【原】Python学习

    1.常用模块介绍 #python -m SimpleHTTPServer 执行上面的命令就会在服务器当前目录下启动一个文件下载服务器,默认打开8000端口.这个时候,你只需要将IP和端口告诉客户端,即 ...

  9. jquery onclick 问题

    var str = ''; for(var i = 0;i<data.list.length;i++){ str += "<tr><td>" + (i ...

  10. JAVA基础——链表结构之双端链表

    双端链表:双端链表与传统链表非常相似.只是新增了一个属性-即对最后一个链结点的引用 如上图所示:由于有着对最后一个链结点的直接引用.所以双端链表比传统链表在某些方面要方便.比如在尾部插入一个链结点.双 ...