3811: 玛里苟斯

Time Limit: 10 Sec  Memory Limit: 256 MB
Submit: 223  Solved: 98
[Submit][Status][Discuss]

Description

魔法之龙玛里苟斯最近在为加基森拍卖师的削弱而感到伤心,于是他想了一道数学题。
S 是一个可重集合,S={a1,a2,…,an}。
等概率随机取 S 的一个子集 A={ai1,…,aim}。
计算出 A 中所有元素异或 x, 求 xk 的期望。

Input

第一行两个正整数 n, k。
以下 n 行每行一个整数,表示 ai。

Output

如果结果是整数,直接输出。如果结果是小数(显然这个小数是有限的),输出精确值(末尾不加多余的 0)。

Sample Input

4 2
0
1
2
3

Sample Output

3.5

比较难的题

求出n个数的线性基,线性基中每个集合的异或和都唯一,并且属于满射

所以可以暴力线性基的所有集合异或和,然后加在一起除以2^cnt就是答案了(cnt为线性基元素个数)

但是线性基中最多有62个数,暴力是不行的

考虑按k分情况讨论

①k>=3:

因为答案不会超过long long范围,所以线性基中所有元素不会超过64/3个,可以直接暴力

不过注意一个坑:答案不会超过long long但是你计算所有异或和最后要除以2^cnt才是答案,所以计算所有贡献的过程中可能会爆long long,要边计算边除,也就是将val写成val/(2^cnt)和val%(2^cnt)两部分;

②k = 1:

不能暴力了,假设某个数ai转成二进制后第k位为1,因为这个数被选的概率刚好是1/2,并且很明显,无论它和谁异或,这个1一定都会有刚好1/2的概率对答案有贡献,所以可以发现答案就是所有数or起来/2

③k = 2:

假设某个集合的异或和为x,x转成二进制后是bm…b1b2b3(bm表示二进制第m位,0/1),那么x²就等于∑bibj*2^(i+j),当且仅当第i位第j位都为1时,对答案计算有2^(i+j)的贡献,用上面k=1的思想可以轻松得出这个概率是1/4(有00, 10, 01, 11四种情况各1/4),不过,当所有数第i位和第j位都相同时,概率会变为1/2(只有00,11两种情况),当所有数第i位都为0或者第j位都为0时概率为0

#include<stdio.h>
#define LL unsigned long long
LL a[100005], p[66], jz[66], er[66] = {1};
int main(void)
{LL ans, temp, mod, c, d;int i, j, k, cnt, n, flag;scanf("%d%d", &n, &k);for(i=1;i<=62;i++)er[i] = er[i-1]*2;for(i=1;i<=n;i++)scanf("%llu", &a[i]);if(k==1){ans = 0;for(i=1;i<=n;i++)ans |= a[i];printf("%llu", ans/2);if(ans%2)printf(".5");}else if(k==2){temp = 0;for(i=1;i<=n;i++)temp |= a[i];mod = ans = 0;for(i=62;i>=0;i--){for(j=62;j>=0;j--){if((temp&(1ll<<i))==0 || (temp&(1ll<<j))==0)continue;flag = 1;for(k=1;k<=n;k++){if((a[k]&(1ll<<i)) && (a[k]&(1ll<<j))==0 || (a[k]&(1ll<<i))==0 && (a[k]&(1ll<<j))){flag = 0;break;}}if(flag){ans += er[i+j]/2;mod += er[i+j]%2;}else{ans += er[i+j]/4;if(er[i+j]%4)mod++;}}}printf("%llu", ans+mod/2);if(mod%2)printf(".5");}else{cnt = 0;for(i=1;i<=n;i++){for(j=62;j>=0;j--){if(a[i]&(1ll<<j)){if(p[j]==0){p[j] = a[i];jz[cnt++] = p[j];break;}elsea[i] ^= p[j];}}}ans = mod = 0;for(i=0;i<(1ll<<cnt);i++){temp = 0;for(j=0;j<=cnt-1;j++){if(i&(1ll<<j))temp ^= jz[j];}c = 0, d = 1;for(j=1;j<=k;j++){c *= temp, d *= temp;c += d/er[cnt], d %= er[cnt];}ans += c, mod += d;ans += mod/er[cnt], mod %= er[cnt];}printf("%llu", ans);if(mod)printf(".5");}printf("\n");return 0;
}

bzoj 3811: 玛里苟斯(期望+线性基)相关推荐

  1. bzoj 3811: 玛里苟斯【线性基+期望dp】

    这个输出可是有点恶心啊--WA*inf,最后抄了别人的输出方法orz 还有注意会爆long long,要开unsigned long long 对于k==1,单独考虑每一位i,如果这一位为1则有0.5 ...

  2. 【BZOJ3811】玛里苟斯(线性基)

    [BZOJ3811]玛里苟斯(线性基) 题面 BZOJ 题解 \(K=1\)很容易吧,拆位考虑贡献,所有存在的位出现的概率都是\(0.5\),所以答案就是所有数或起来的结果除二. \(K=2\)的情况 ...

  3. bzoj 3811 玛里苟斯 - 线性基

    题目传送门 传送门I 传送门II 题目大意 给定集合$S$,问集合$S$的任意选一个子集的异或和的$k$次幂期望. 保证答案在$2^{63}$内. 注意到答案在$2^{63}$内,所以,当$k \ge ...

  4. [BZOJ 3811]玛里苟斯(线性基)尽量理解的题解

    文章目录 title solution code title 魔法之龙玛里苟斯最近在为加基森拍卖师的削弱而感到伤心,于是他想了一道数学题. S 是一个可重集合,S={a1,a2,-,an}. 等概率随 ...

  5. [BZOJ3811][UOJ#36][清华集训2014]玛里苟斯(期望 + 线性基)

    Address BZOJ 3811 UOJ #36 Solution 看到异或,首先想到拆位 下面 xor ( A ) \text{xor}(A) xor(A) 表示子集 A A A 的异或和, b ...

  6. uoj#36. 【清华集训2014】玛里苟斯(线性基+概率期望)

    传送门 为啥在我看来完全不知道为什么的在大佬们看来全都是显然-- 考虑\(k=1\)的情况,如果序列中有某一个\(a_j\)的第\(i\)位为\(1\),那么\(x\)的第\(i\)位为\(1\)的概 ...

  7. bzoj 3811: 玛里苟斯

    3811: 玛里苟斯 Time Limit: 10 Sec  Memory Limit: 256 MB Submit: 190  Solved: 95 [Submit][Status][Discuss ...

  8. BZOJ 2115 [Wc2011] Xor ——线性基

    [题目分析] 显然,一个路径走过两边是不需要计算的,所以我么找到一条1-n的路径,然后向该异或值不断异或简单环即可. 但是找出所有简单环是相当复杂的,我们只需要dfs一遍,找出所有的环路即可,因为所有 ...

  9. BZOJ 2460: [BeiJing2011]元素 线性基

    2460: [BeiJing2011]元素 Description 相传,在远古时期,位于西方大陆的 Magic Land 上,人们已经掌握了用魔 法矿石炼制法杖的技术.那时人们就认识到,一个法杖的法 ...

最新文章

  1. mysql什么格式转换_MySQL日期格式转换
  2. 递归函数练习——累乘
  3. spring boot整合JPA实现多条件查询并分页
  4. linux uboot启动流程分析,uboot启动流程分析
  5. 软件质量管理之困境与对策思考
  6. 同比 数据模型 环比_历史数据模型解决方案-历史数据模型解决方案
  7. [深度学习-实践]Transformer模型训练IMDB-tensorflow2 keras
  8. Python中tkinter.filedialog
  9. silverlight3.0 怎么调试XAML对应的XAML.CS文件
  10. 手机 android.downloader病毒,Android手机出现史上最强木马 感染后无法删除
  11. android缅甸语,关于unicode:Android中的缅甸语言
  12. imazing是什么?iPhone苹果第三方iOS设备管理软件
  13. 温度传感器的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  14. micropython esp8266 红外控制小车
  15. 报错:跨域问题解决 No ‘Access-Control-Allow-Origin‘ header is present on the requested resource.
  16. Go设置一个工作区打开多个项目
  17. 可编程计数器/定时器8253和8254
  18. Spring的四种注入方式
  19. 【数据格式化】数字货币加逗号隔开
  20. SpringBoot+Vue实现前后端分离的汽车配件销售管理系统

热门文章

  1. 大数据预测CSDN2018博客之星评选结果
  2. 后端的一个刚毕业的小伙子老早完成了架构和服务端逻辑,接口洋洋洒洒列了出来。。。...
  3. sklearn——线性回归例子
  4. 侃一侃WebSocket
  5. 中国人寿研发中心笔试JAVA开发
  6. 在uniapp里面使用阿里矢量图标(iconfont)
  7. mysqlbinlog 加-v -vv 的区别
  8. 计算机电源启动时序,控制电源启动及关断时序
  9. 二、零基础入门微信小程序项目开发之页面跳转实现
  10. 【el-dialog + video】控制视频弹框的显示与隐藏