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 ...
随机推荐
- RecycleView的简单应用
recycleView在界面展示上类似于ListView,但不同于ListView的是它展示的每一个item类型可以不一样: RecycleAdapter类: public class Recy ...
- [C陷阱和缺陷] 第3章 语义“陷阱”
第3章 语义"陷阱" 一个句子哪怕其中的每个单词都拼写正确,而且语法也无懈可击,仍然可能有歧义或者并非书写者希望表达的意思.程序也有可能表面上是一个意思,而实际上的意思却相 ...
- 374 Guess Number Higher or Lower 猜数字大小
我们正在玩一个猜数字游戏. 游戏规则如下:我从 1 到 n 选择一个数字. 你需要猜我选择了哪个数字.每次你猜错了,我会告诉你这个数字是大了还是小了.你调用一个预先定义好的接口 guess(int n ...
- [转]iOS WebKit browsers and auto-zooming form controls
问题描述:https://github.com/jquery/jquery-mobile/issues/2581 本文转自:http://www.456bereastreet.com/archive/ ...
- D1-mini esp8266的资料备份
需要更新esp8266库 http://arduino.esp8266.com/stable/package_esp8266com_index.json 下载好即可.
- UVM基础之---------uvm factory机制register
factory机制的一大特点就是根据类的名字来创建类的实例. factory 机制中根据类名来创建类的实例所用到的技术:一是参数化的类,二是静态变量和静态函数.这两者是factory机制实现的根本所在 ...
- spring中配置数据源
spring中配置数据源的几种常见方式: #mysql 数据库配置(jdbc.properties) jdbc.driverClassName=com.mysql.jdbc.Driver jdbc.u ...
- zencart,分类,所有,显示
改的文件:includes/classes/category_tree.php,最简单的修改 if (!isset($first_element)) { $first_element = ...
- Javascript(IE快捷键操作),ASP技巧
1. oncontextmenu="window.event.returnValue=false" 将彻底屏蔽鼠标右键 <table border oncontextmenu ...
- Codeforces_761_E_(dfs)
E. Dasha and Puzzle time limit per test 2 seconds memory limit per test 256 megabytes input standard ...