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. Glide和Picassio的比较

    http://blog.csdn.net/fancylovejava/article/details/44747759 对象池: Glide原理的核心是为bitmap维护一个对象池.对象池的主要目的是 ...

  2. Poj 3177 Redundant Paths (双连通分支+节点统计)

    题目描述: 给出一个无向的连通图,问最少加入几条边,才能使所给的图变为无桥的双连通图? 解题思路: 可以求出原图中所有的不包含桥的所有最大连通子图,然后对连通子图进行标记缩点,统计度为1的叶子节点le ...

  3. 02—IOC实现项目中的解耦

  4. ActiveMQ应用

    一. 概述与介绍 ActiveMQ 是Apache出品,最流行的.功能强大的即时通讯和集成模式的开源服务器.ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provide ...

  5. ValueError: multi-byte encodings are not supported

    pyton解析xml时,报错 是因为编码的问题,把xml的头 <?xml version="1.0" encoding="gb2312"?> 改成 ...

  6. 【百度编辑器ueditor】工具,如何去掉百度编辑器 ueditor 元素路径、字数统计等

    去掉如下截图: 在百度编辑器 ueditor 根目录下: ueditor.config.js 文件中 搜索并将参数elementPathEnabled设置成false即可 常用功能开关如下: ,ele ...

  7. HDU_1561_The more, The Better_树型dp

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1561 The more, The Better Time Limit: 6000/2000 MS (J ...

  8. ls 命令还能这么玩?看一下这 20 个实用范例

    Linux中一个基本命令是ls.没有这个命令,我们会在浏览目录条目时会遇到困难.这个命令必须被每个学习Linux的人知道. ls是什么 ls命令用于列出文件和目录.默认上,他会列出当前目录的内容.带上 ...

  9. EF-基础用法

    一丶LINQ TO SQL 语法 基本格式:  from c in 表名 where 条件 select c 二丶LINQ简介 LINQ是Language Integrated Query的简称,它是 ...

  10. A3. JVM 类加载器

    [概述] 虚拟机设计团队把类加载阶段中的 “通过一个类的全限定名来获取描述此类的二进制字节流” 这个动作放到 Java 虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类.实现这个动作的代码 ...