题目

这可算是描述很简单的一道题了!但是不简单。

\(S\)是一个可重集合,\(S = \{a_1, a_2, \dots, a_n \}\)。
等概率随机取\(S\)的一个子集\(A = \{a_{i_1}, \dots, a_{i_m}\}\)。
计算出\(A\)中所有元素异或\(x\), 求\(x^k\)的期望。

要点

要点 1

所有异或出来的不同结果的数量是同样多的(这句话可能有点不清楚)。
我的意思是说,假如异或出来的结果有\(5\)、\(3\)、\(4\),那么结果是\(5\)的异或方案数量是等于结果是\(3\)的异或方案数量的,也是等于结果是\(4\)的异或方案数量的。

除此之外,如果
设异或结果为\(0\)的子集(包括空集)数量为\(n\),那么如果异或出来的结果有\(x\),那么一定恰好有\(n\)种方案使得异或出来的结果是\(x\)。

要点 2 \(a_i\)的大小

设其大小为\(2^m-1\),说白了就是化成二进制后有多少位。

那么\[(2^m-1)^k \leqslant answer < 2^{63}\]
即\[2^{mk} \leqslant 2^{63}\]
就是\[m \leqslant \frac {63} {k}\]

算法

算法 1

根据要点1,很容易想到高斯消元。消元后直接暴力即可,不过这个时间复杂度是 \(O(2^m)\)。只能通过\(60 \%\)的数据。

算法 2

设\(P = \lbrace a_1, a_2, \dots, a_{2^n} \rbrace\),它的元素就是\(A\)中所有元素异或,所以它的大小为\(2^n\)。

那么答案为\[\frac {\sum_{i=1}^{2^n} {{a_i}^k}} {2^n}\]

由于\(a_i\)化成二进制后位数比较少,所以用\(b_{i,j}\)表示\(a_i\)化成二进制后的第\(j\)位。

那么答案可以写成\[\frac {\sum_{i=1}^{2^n} ({{\sum_{j=0}^{m} { b_{i,j} \cdot 2^j }}})^k} {2^n}\]

现在假设\(k=2\),有:\[\frac {\sum_{i=1}^{2^n} ({{\sum_{j=0}^{m} \sum_{p=0}^{m} {} { b_{i,j} \cdot b_{i,p} \cdot 2^{j+p} }}})} {2^n}\]

也就是:\[\sum_{j=0}^{m} \sum_{p=0}^{m}( \frac {\sum_{i=1}^{2^n} { b_{i,j} \cdot b_{i,p} }} {2^n}\cdot 2^{j+p})\]

对于\(\frac {\sum_{i=1}^{2^n} { b_{i,j} \cdot b_{i,p} }} {2^n}\),是可以在\(O(n)\)的时间复杂度内算出来的!如果\(j=p\),那么这个值为第\(j\)为\(1\)的概率,如果\(j\neq p\),那么这个值为第\(j\)和第\(p\)同时为\(1\)的概率,这个用一个迭代可以算出(根据要点1,算出最终所有可能出现的异或结果,这里的异或结果是指第\(j\)位和第\(p\),只有4种结果)。

当\(k \neq 2\)时,原理一样!

这样子,我们就可以在\(O(m^k \cdot (n + (2^k)^3))\)内算出\(answer\)了。

k m 总复杂度(估算)
1 63 63
2 31 61504
3 21 4741632
4 15 207360000
5 12 8153726976

好吧,你会发现迭代的时间复杂度有点高!事实上可以利用高斯消元后的独立数进行推导同时出现\(1\)的概率。

这样的话,时间复杂度就是\(O(m^k \cdot m)\)了。

清华集训2014 day1 task1 玛里苟斯的更多相关文章

  1. 清华集训2014 day2 task1 简单回路

    题目 如题. 算法 就是刚学习的插头DP. 从前往后和从后往前分别进行一次DP. 要点 合法的括号序列只有103个 如何合并两次dp的信息 一开始犯傻了,以为当且仅当两个轮廓线的状态相同才是合法的方案 ...

  2. 清华集训2014 day1 task2 主旋律

    题目 这可算是一道非常好的关于容斥原理的题了. 算法 好吧,这题我毫无思路,直接给正解. 首先,问题的正面不容易求,那么就求反面吧: 有多少种添加边的方案,使得这个图是DAG图(这里及以下所说的DAG ...

  3. 清华集训2014 day1 task3 奇数国

    题目 题目看起来好像很难的样子!其实不然,这是最简单的一道题. 算法 首先要注意的是: \(number \cdot x + product \cdot y = 1\) ,那么我们称\(number\ ...

  4. uoj 41 【清华集训2014】矩阵变换 婚姻稳定问题

    [清华集训2014]矩阵变换 Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://uoj.ac/problem/41 Description 给出 ...

  5. AC日记——【清华集训2014】奇数国 uoj 38

    #38. [清华集训2014]奇数国 思路: 题目中的number与product不想冲: 即为number与product互素: 所以,求phi(product)即可: 除一个数等同于在模的意义下乘 ...

  6. UOJ#46. 【清华集训2014】玄学

    传送门 分析 清华集训真的不是人做的啊嘤嘤嘤 我们可以考虑按操作时间把每个操作存进线段树里 如果现在点x正好使一个整块区间的右端点则更新代表这个区间的点 我们不难发现一个区间会因为不同的操作被分成若干 ...

  7. 清华集训2014 sum

    清华集训2014sum 求\[∑_{i=1}^{n}(-1)^{⌊i√r⌋}\] 多组询问,\(n\leq 10^9,t\leq 10^4, r\leq 10^4\). 吼题解啊 具体已经讲得很详细了 ...

  8. 【bzoj3811】【清华集训2014】玛里苟斯

    3811: 玛里苟斯 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 500  Solved: 196[Submit][Status][Discuss] ...

  9. [UOJ]#36. 【清华集训2014】玛里苟斯

    题目大意:给n个数字,求子集的异或和的k次方的期望(n<=10^5,k<=5,保证答案小于2^63) 做法:首先如果从集合中拿出a和b,把a和a xor b放回集合,子集的异或和与原来是一 ...

随机推荐

  1. 猪猪的机器学习笔记(十四)EM算法

    EM算法 作者:樱花猪   摘要: 本文为七月算法(julyedu.com)12月机器学习第十次次课在线笔记.EM算法全称为Expectation Maximization Algorithm,既最大 ...

  2. BZOJ 1613: [Usaco2007 Jan]Running贝茜的晨练计划( dp)

    dp乱搞即可...( 我就是这样 A 的.. 后来想改快一点..然后就WA了...不理了 ------------------------------------------------------- ...

  3. Yii2 数据操作DAO

    参考: http://www.yiiframework.com/doc/guide/1.1/zh_cn/database.dao http://blog.csdn.net/hzqghost/artic ...

  4. HBase 几点思考

    1. http://blog.csdn.net/yueyedeai/article/details/14648067 2. http://blog.csdn.net/pirateleo/article ...

  5. XPath与多线程爬虫

    XPath是一门在xml中查询信息的语言安装使用XPath 1.安装lxml库 window:pip install lxmllinux:sudo pip install lxml国内安装缓慢,建议到 ...

  6. commons-logging和slf4j都是日志的接口

    过上面的图,可以简单的理清关系! commons-logging和slf4j都是日志的接口,供用户使用,而没有提供实现! log4j,logback等等才是日志的真正实现. 当我们调用接口时,接口的工 ...

  7. STL--stack/queue的使用方法

    stack(栈)和queue(队列)也是在程序设计中经常会用到的数据容器,STL为我们提供了方便的stack(栈)的queue(队列)的实现. 准确地说,STL中的stack和queue不同于vect ...

  8. python 的经常使用时间操作,取得当前时间等

    我们先导入必须用到的一个module>>> import time设置一个时间的格式,以下会用到>>>ISOTIMEFORMAT=’%Y-%m-%d %X’看一下当 ...

  9. Android平台一些流行的使用3D技术开发的锁屏

    题外话:从2007年android系统的发布开始,到2008年的第一款手机问世,再到现在击败塞班,wm,黑霉,然后遍地开花,2013年,智能机出货超过了功能机,android功不可没.一路走来,虽然a ...

  10. COM组件

    COM组件   COM component(COM组件)是微软公司为了计算机工业的软件生产更加符合人类的行为方式开发的一种新的软件开发技术.在COM构架下,人们可以开发出各种各样的功能专一的组件,然后 ...