[清华集训2014]玛里苟斯
一、题目
点此看题
二、解法
注意到答案是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]玛里苟斯相关推荐
- 清华集训2014 玛里苟斯
清华集训2014 玛里苟斯 求子集异或和k次方的期望. 异或考虑按位算贡献. 对于\(K=1\),考虑异或和\(\frac{x}{2}\)就是答案. 证明简单来说就是,你可以先打一个概率\(dp\)分 ...
- [清华集训2014]玛里苟斯(线性基+概率期望)
首先有一些前置引理: 1. 由期望的线性性,平方的期望不等于期望的平方,所以求k次方的期望时,需要记录1~k-1的期望,然后计算增量(OSU!),这个这题没用上. 2. 线性基是可以变成每位只在一个元 ...
- [BZOJ3811][UOJ#36][清华集训2014]玛里苟斯(期望 + 线性基)
Address BZOJ 3811 UOJ #36 Solution 看到异或,首先想到拆位 下面 xor ( A ) \text{xor}(A) xor(A) 表示子集 A A A 的异或和, b ...
- 【清华集训 2014】玛里苟斯(组合计数 + 线性基)
题目链接:[清华集训 2014]玛里苟斯 推荐博客:[BZOJ 3811]玛里苟斯:线性基(详细证明) 首先想到将kkk分类讨论. k=1" role="presentation& ...
- 玛里苟斯[清华集训2014 Day1]
玛里苟斯[清华集训2014 Day1] 魔法之龙玛里苟斯最近在为加基森拍卖师的削弱而感到伤心,于是他想了一道数学题. S 是一个可重集合,S={a1,a2,-,an}. 等概率随机取 S 的一个子集 ...
- 【清华集训2014】Sum)(类欧几里得算法)
[清华集训2014]Sum 然后本质上我们需要求解的就是那个带根号式子的奇偶性,然后我们发现这个式子很像是类欧几里得算法,求解一个斜率为无理数直线下的整点个数,然后我们直接对于一般形式求解,那么就是每 ...
- 【清华集训2014】【BZOJ3811】玛里苟斯
Description 魔法之龙玛里苟斯最近在为加基森拍卖师的削弱而感到伤心,于是他想了一道数学题. S 是一个可重集合,S={a1,a2,-,an}. 等概率随机取 S 的一个子集 A={ai1,- ...
- [UOJ]#36. 【清华集训2014】玛里苟斯 线性基+分类讨论
题意: 魔法之龙玛里苟斯最近在为加基森拍卖师的削弱而感到伤心,于是他想了一道数学题. SSS 是一个可重集合,S=a1,a2,-,anS={a1,a2,-,an}S=a1,a2,-,an. 等概率随机 ...
- 【清华集训2014】玛里苟斯
看到这道题,然后便错误地联想到了数位DP什么的--接着发现了答案在一个界内,然后就想着暴力了. 首先如果对每一位都设一个变量的话,根据插板法,最多只能有1e7个项对答案有贡献,和答案在一个界内这个条件 ...
最新文章
- codebilcks怎么新建c++文件_赤峰将新建1280个公交候车亭丨明年,将对这6条街路实施改造|雨污分流|赤峰|候车亭|红山区|泵站...
- 给CVPR颁“金酸莓奖”,知乎网友热议最差论文,战火烧到Reddit论坛
- yii 清除mysql缓存_Yii2开启数据表结构缓存和清除
- css中怎么令dt 和 dd对齐
- .Net线程问题解答
- Cookie与系统安全
- java filterconfig_使用FilterConfig读取配置文件的信息 ---学习笔记
- 树莓派小车————全部代码
- Aliyun 阿里云 机器翻译调用 详解
- 走近科学:揭秘在线DDoS攻击平台
- 10张剪纸风格2021牛年祝福海报
- 树莓派4BUbuntu server 20.04 Kubernetes-v1.17.x- Docker19.03 keadmv1.10.3部署错误一览
- mybatis按姓名或手机号搜索
- Redis-命令操作Redis
- 基于JAVA校园快递联盟系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署
- angular 父子组件通信
- loading的使用
- 基于python+pyqt+halcon实现视觉定位(halcon12.0)【附部分源码】
- 【游戏设计笔记】游戏设计第一堂课
- rebar3 自定义编译插件攻略