一、题目

点此看题

二、解法

注意到答案是2632^{63}263次方,可以分kkk来讨论:

k=1k=1k=1,求出所有值或起来的值,每一位有12\frac{1}{2}21​的概率有贡献,所以把这个值除以222即可。

k=2k=2k=2,枚举i,ji,ji,j,考虑贡献是 2i+j×p2^{i+j}\times p2i+j×p,ppp是i,ji,ji,j同时有值的概率,考虑aaa中0有没有101010或010101(是i,ji,ji,j位上有没有值),如果有的话ppp是0.250.250.25,否则ppp是0.50.50.5,那么0.250.250.25是怎么得出来的呢?分成三种情况,只有010101,只有101010,有010101和101010,计算就交给读者了,限于篇幅不给出详细说明。

k≥3k\geq3k≥3,我们建出线性基,然后直接爆搜即可(想一想,每种情况的概率是2−cnt2^{-cnt}2−cnt,cntcntcnt是线性基里的个数,因为每种情况的个数是2n−cnt2^{n-cnt}2n−cnt),只用搜O(263/32^{63/3}263/3)那么次即可。

详细实现中还有一些细节,可以康康我的代码和注释。

#include <cstdio>
#define int unsigned long long
const int M = 100005;
int read()
{   int x=0,flag=1;char c;while((c=getchar())<'0' || c>'9') if(c=='-') flag=-1;while(c>='0' && c<='9') x=(x<<3)+(x<<1)+(c^48),c=getchar();return x*flag;
}
int n,m,k,sum,tot=1,a[M],p[70],ans,ret;
void fuck1()
{for(int i=1;i<=n;i++)ans|=a[i];printf("%lld",(long long)(ans/2));(ans%2)?puts(".5"):puts("");
}
void fuck2()
{for(int i=1;i<=n;i++)sum|=a[i];for(int i=0;i<32;i++)for(int j=0;j<32;j++)if((sum>>i&1) && (sum>>j&1)){int f=0;for(int k=1;k<=n;k++)if((a[k]>>i&1)^(a[k]>>j&1)) {f=1;break;}if(i+j<1+f) ret++;//保证不能有负数哟 else ans+=(1ll<<(i+j-1-f));}printf("%lld",(long long)(ans+ret/2));(ret%2)?puts(".5"):puts("");
}
void ins(int x)
{for(int i=m;~i;i--)//无符号减到-1会炸 {if(!(x>>i&1))continue;if(!p[i]) {tot<<=1;p[i]=x;break;}x^=p[i];}
}
void dfs(int x,int y)
{if(x>m){int r=1;for(int i=1;i<k;i++) r=r*y;ans+=r/tot*y;r%=tot;r*=y;ret+=r;ans+=ret/tot;ret%=tot;//要这样来卡精度 return ;}if(p[x]) dfs(x+1,y),dfs(x+1,y^p[x]);else dfs(x+1,y);
}
void fuck3()
{if(k==3) m=21;if(k==4) m=16;if(k==5) m=13;for(int i=1;i<=n;i++)ins(a[i]);dfs(0,0);printf("%lld",(long long)ans);ret?puts(".5"):puts("");
}
signed main()
{n=read();k=read();for(int i=1;i<=n;i++)a[i]=read();if(k==1) fuck1();if(k==2) fuck2();if(k>=3) fuck3();
}

[清华集训2014]玛里苟斯相关推荐

  1. 清华集训2014 玛里苟斯

    清华集训2014 玛里苟斯 求子集异或和k次方的期望. 异或考虑按位算贡献. 对于\(K=1\),考虑异或和\(\frac{x}{2}\)就是答案. 证明简单来说就是,你可以先打一个概率\(dp\)分 ...

  2. [清华集训2014]玛里苟斯(线性基+概率期望)

    首先有一些前置引理: 1. 由期望的线性性,平方的期望不等于期望的平方,所以求k次方的期望时,需要记录1~k-1的期望,然后计算增量(OSU!),这个这题没用上. 2. 线性基是可以变成每位只在一个元 ...

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

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

  4. 【清华集训 2014】玛里苟斯(组合计数 + 线性基)

    题目链接:[清华集训 2014]玛里苟斯 推荐博客:[BZOJ 3811]玛里苟斯:线性基(详细证明) 首先想到将kkk分类讨论. k=1" role="presentation& ...

  5. 玛里苟斯[清华集训2014 Day1]

    玛里苟斯[清华集训2014 Day1] 魔法之龙玛里苟斯最近在为加基森拍卖师的削弱而感到伤心,于是他想了一道数学题. S 是一个可重集合,S={a1,a2,-,an}. 等概率随机取 S 的一个子集  ...

  6. 【清华集训2014】Sum)(类欧几里得算法)

    [清华集训2014]Sum 然后本质上我们需要求解的就是那个带根号式子的奇偶性,然后我们发现这个式子很像是类欧几里得算法,求解一个斜率为无理数直线下的整点个数,然后我们直接对于一般形式求解,那么就是每 ...

  7. 【清华集训2014】【BZOJ3811】玛里苟斯

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

  8. [UOJ]#36. 【清华集训2014】玛里苟斯 线性基+分类讨论

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

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

    看到这道题,然后便错误地联想到了数位DP什么的--接着发现了答案在一个界内,然后就想着暴力了. 首先如果对每一位都设一个变量的话,根据插板法,最多只能有1e7个项对答案有贡献,和答案在一个界内这个条件 ...

最新文章

  1. codebilcks怎么新建c++文件_赤峰将新建1280个公交候车亭丨明年,将对这6条街路实施改造|雨污分流|赤峰|候车亭|红山区|泵站...
  2. 给CVPR颁“金酸莓奖”,知乎网友热议最差论文,战火烧到Reddit论坛
  3. yii 清除mysql缓存_Yii2开启数据表结构缓存和清除
  4. css中怎么令dt 和 dd对齐
  5. .Net线程问题解答
  6. Cookie与系统安全
  7. java filterconfig_使用FilterConfig读取配置文件的信息 ---学习笔记
  8. 树莓派小车————全部代码
  9. Aliyun 阿里云 机器翻译调用 详解
  10. 走近科学:揭秘在线DDoS攻击平台
  11. 10张剪纸风格2021牛年祝福海报
  12. 树莓派4BUbuntu server 20.04 Kubernetes-v1.17.x- Docker19.03 keadmv1.10.3部署错误一览
  13. mybatis按姓名或手机号搜索
  14. Redis-命令操作Redis
  15. 基于JAVA校园快递联盟系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署
  16. angular 父子组件通信
  17. loading的使用
  18. 基于python+pyqt+halcon实现视觉定位(halcon12.0)【附部分源码】
  19. 【游戏设计笔记】游戏设计第一堂课
  20. rebar3 自定义编译插件攻略

热门文章

  1. cocos2dx 更改精灵图片方法
  2. 变身“流程公司” 什么工作流合适
  3. fortran内存不足的解决方法
  4. 2019年起微信和支付宝都必须执行的新规定,你知道吗?
  5. 区块链应用_供应链金融
  6. SpringMVC基础一
  7. TensorBoard一幅图中显示多条曲线
  8. 最后谁剩下来了就返回哪个阵营 Dota2 Senate
  9. 项目经理是如何做到每月“0”电话费的
  10. 慕尼黑工业大学开源含四季的数据集:用于自动驾驶的视觉长期定位