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 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的更多相关文章
- [容斥原理] zoj 3556 How Many Sets I
主题链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do? problemId=4535 How Many Sets I Time Limit: 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 ...
- 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 ...
- 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 ...
- ZOJ 3556
终于做出来了,激动.... 这道题隐藏得深啊,但若推导下来,就变简单了. 首先,一个集合的子集的个数为2^n=s.注意了,题目求的是有序集合组,并且每个集合是可以重复使用的,怎么办呢?这就要想到多重集 ...
- How Many Sets I(容斥定理)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3556 How Many Sets I Time Limit: 2 ...
- 组合数们&&错排&&容斥原理
最近做了不少的组合数的题这里简单总结一下下 1.n,m很大p很小 且p为素数p要1e7以下的 可以接受On的时间和空间然后预处理阶乘 Lucas定理来做以下是代码 /*Hdu3037 Saving B ...
- zoj How Many Sets I(组合计数)
http://acm.zju.edu.cn/onlinejudge/showProblem.do? problemId=4535 一个集合s有n个元素,求满足这种集合序列{s1,s2....sk}使S ...
- ZOJ 1586 QS Network (最小生成树)
QS Network Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%lld & %llu Submit Sta ...
随机推荐
- Androidstudio的安装与使用调试
1安装与基本使用 1.1androidstudio的安装 1.到android-studio\bin文件夹里面,根据自己的电脑配置,打开studio.exe或者studio64.exe 2.按照向导默 ...
- [Qt及Qt Quick开发实战精解] 第1章 多文档编辑器
这一章的例子是对<Qt Creator快速人门>基础应用篇各章节知识的综合应用, 也是一个规范的实例程序.之所以说其规范,是因为在这个程序中,我们对菜单什么时候可用/什么时候不可用.关 ...
- hdu1166 敌兵布阵(树状数组)
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- 题解报告:hdu 1686 Oulipo(裸KMP)
Problem Description The French author Georges Perec (1936–1982) once wrote a book, La disparition, w ...
- [译]Customizing Operations
Customizing Operations定制操作 There is an ongoing development today where more and more protocols are b ...
- python之路 之一pyspark
pip包下载安装pyspark pip install pyspark 这里可能会遇到安装超时的情况 加参数 --timeout=100 pip -default -timeout=1 ...
- mybatis之多个对象自动装配问题
因为业务的需要,所以我在一个方法中植入三个对象,但是mybatis并没有自动装配,结果并不是我想的那么美好,还是报错了.报错截图如下: <select id="GetOneBillPa ...
- log4j2异步日志解读(二)AsyncLogger
前文已经讲了log4j2的AsyncAppender的实现[log4j2异步日志解读(一)AsyncAppender],今天我们看看AsyncLogger的实现. 看了这个图,应该很清楚AsyncLo ...
- LR接口测试---Java Vuser之增删改查
import lrapi.lr; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Prepared ...
- npm换淘宝源 yarn换淘宝源
查询初始的源 npm get registry > https://registry.npmjs.org/ 设置淘宝源 npm config set registry http://regist ...