传送门

为啥在我看来完全不知道为什么的在大佬们看来全都是显然……

考虑\(k=1\)的情况,如果序列中有某一个\(a_j\)的第\(i\)位为\(1\),那么\(x\)的第\(i\)位为\(1\)的概率就是\(\frac{1}{2}\)

证:把\(a_j\)拿出来,那么剩下的里面选出的子集不管是什么情况,\(a_j\)放进去或不放肯定有一种能使\(x\)的第\(i\)位为\(1\),且另一种使\(x\)的第\(i\)位为\(0\),那么概率就是\(\frac{1}{2}\)

然后是\(k=2\)的情况,就是个\[\sum_{i=0}^{base}\sum_{j=0}^{base}d_id_j2^{i+j}\]
其中\(base\)为最高位,\(d_i,d_j\)为这一位为\(1\)的概率。如果\(i\)或\(j\)其中一个不存在则跳过。否则在考虑\(i,j\)在所有的数中出现的情况,如果对于每一个数,这两位的值都相同,说明这两个值不互相独立,那么同时为\(1\)的概率就是\(\frac{1}{2}\),否则这两位互相独立,那么同时为\(1\)的概率是\(\frac{1}{4}\)

最后是\(k\geq 3\)的情况,这里有一个结论,异或值\(x\)取到所有能取的数的概率相等。大佬们都认为显然,然而我太菜了看不出来为什么,伪证一下好了

设\(n=|S|\),\(S\)中线性基的大小为\(Base\),我们考虑在那些不在线性基中的元素取数,共有\(2^{n-Base}\)中取法,对于每一种取法取到的值\(x\),线性基中有唯一对应的取法取到\(x\),所以在线性基中取数使得所有元素异或和为\(0\)的方案数是\(2^{n-Base}\)

\(x\)能取到的每一个值\(v\)都可以被线性基中的元素唯一表示,记为\(L\),所有使异或和\(x\)为\(v\)的集合一定是形如\(L\)异或上元素异或和为\(0\)的集合\(T\),所以取到每个\(v\)的方案数都是\(2^{n-Base}\),所以概率相等

于是我们直接搞出线性基,然后爆搜所有能异或出来的元素,每个元素的概率都是\(1\)除以元素个数

然后是关于小数的问题,\(k=1,2\)的时候根据运算过程可以发现小数位要么是\(0\)要么是\(0.5\)

然后是\(k\geq 3\)的时候小数位也最多是\(0.5\),\(Bill\ Yang\)巨巨的证明看不太懂,然后大米饼巨巨的证明勉强能看懂,证明如下

可以仔细分析一下k==2时的算法;
再扩展到k次方,发现在异或运算下:
二进制位之间贡献不相互独立是具有传递性的;
假设一次计算答案时选定的k个二进制位(可能相同分)集合为:
B  = {b1,b2,...bk}
我们可以把他们进一步分成m个集合:
S1...Sm
相同集合元素贡献不互相独立,不同集合贡献互相独立;
这时对答案期望的贡献应该是2^{b1+b2+...+bk - m}  ;
而k >= m , 且B里面至少有m个不同的二进制位(即bi!=bj这种);
所以考虑b1+b2+...+bk - m最小的情况:
分析可以发现最小为-1;
所以答案小数点后只有一位;

然后……没啥然后了……

//minamoto
#include<bits/stdc++.h>
#define R register
#define ll unsigned long long
#define fp(i,a,b) for(R int i=a,I=b+1;i<I;++i)
#define fd(i,a,b) for(R int i=a,I=b-1;i>I;--i)
#define go(u) for(int i=head[u],v=e[i].v;i;i=e[i].nx,v=e[i].v)
using namespace std;
char buf[1<<21],*p1=buf,*p2=buf;
inline char getc(){return p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++;}
ll read(){R ll res,f=1;R char ch;while((ch=getc())>'9'||ch<'0')(ch=='-')&&(f=-1);for(res=ch-'0';(ch=getc())>='0'&&ch<='9';res=res*10+ch-'0');return res*f;
}
const int N=1e5+5,Base=25;
int n,K,top;ll a[N],b[N];
ll st[Base+5];
void solve1(){ll res=0;fp(i,0,n-1)res|=a[i];printf("%llu",res/2);if(res&1)puts(".5");
}
void solve2(){ll ans=0,res=0;fp(i,0,31)fp(j,0,31){bool flag=0;fp(k,0,n-1)if(a[k]>>i&1){flag=1;break;}if(!flag)continue;flag=0;fp(k,0,n-1)if(a[k]>>j&1){flag=1;break;}if(!flag)continue;flag=0;fp(k,0,n-1)if((a[k]>>i&1)!=(a[k]>>j&1)){flag=1;break;}if(i+j-1-flag<0)++res;else ans+=1ll<<(i+j-1-flag);}ans+=res>>1,res&=1;printf("%llu",ans);if(res)puts(".5");
}
void solve3(){fp(i,0,n-1){fd(j,Base,0)if(a[i]>>j&1){if(b[j])a[i]^=b[j];else{b[j]=a[i],st[top++]=a[i];break;}}}ll ans=0,res=0;fd(i,(1<<top)-1,0){int val=0;fp(j,0,top-1)if(i>>j&1)val^=st[j];ll a=0,b=1;fp(j,0,K-1){a*=val,b*=val;a+=(b>>top),b&=(1<<top)-1;}ans+=a,res+=b;ans+=(res>>top),res&=(1<<top)-1;}printf("%llu",ans);if(res)puts(".5");
}
int main(){
//  freopen("testdata.in","r",stdin);n=read(),K=read();fp(i,0,n-1)a[i]=read();if(K==1)solve1();else if(K==2)solve2();else solve3();return 0;
}

转载于:https://www.cnblogs.com/bztMinamoto/p/10243316.html

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

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

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

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

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

  3. 清华集训2014 玛里苟斯

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

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

    一.题目 点此看题 二.解法 注意到答案是2632^{63}263次方,可以分kkk来讨论: k=1k=1k=1,求出所有值或起来的值,每一位有12\frac{1}{2}21​的概率有贡献,所以把这个 ...

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

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

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

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

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

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

  8. 【清华集训2014】玛里苟斯(数学 线性基)

    original link - http://uoj.ac/problem/36 题意: 有一个多重集S={a1,a2,...an}S=\{a_1,a_2,...a_n\}S={a1​,a2​,... ...

  9. [清华集训2015 Day1]玛里苟斯-[线性基]

    Description Solution 考虑k=1的情况.假设所有数中,第i位为1的数的个数为x,则最后所有的子集异或结果中,第i位为1的个数为$(C_{k}^{1}+C_{k}^{3}+...)$ ...

最新文章

  1. 关卡2-1 简单的模拟 1540 机器翻译
  2. k3s containerd和docker命令对比表
  3. SVM学习——在matlab上安装libsvm库(一)
  4. 一文读懂vuex4源码,原来provide/inject就是妙用了原型链?
  5. spark work启动失败
  6. java中文件如何加密压缩?
  7. 阿里云上运行Docker版本的PostgreSQL
  8. 互联网的大厂就那么几家,所以很多员工跳槽后都是互相流动的
  9. switch分解试验部分-LAB8:SVI实验
  10. 视频+案例 | 钟南山院士谈5G医疗
  11. 中国的程序员培训是不是有问题
  12. InfoQ在ETE大会上对Android工程师Jake Wharton的采访
  13. run npm fund for details
  14. 有哪些便宜好用的虚拟主机推荐?
  15. 互联网思维笔记(一)
  16. gorm记一次joins查询不出数据
  17. 三步完成两张网卡共享上网,区别于移动热点共享上网
  18. 位与,位或,异或,取反
  19. 通过对json数据解析爬取虎牙直播数据并存入csv文件
  20. ubuntu_内网dns服务器搭建

热门文章

  1. 贝塞尔函数matlab代码
  2. ifix问题汇总QA(个人记录)
  3. 一个很有意思的flash游戏,蚂蚁蛋糕保卫战(antbuster)
  4. Android恶意软件特征及分类
  5. 由九天创合资本及OnFund向上基金联合主办的链•全球区块链投资机构系列酒会第一站在上海顺利举办
  6. 深度学习训练营之优化器对比
  7. 关于uniapp使用swiper及swiper-iteam及scroll-view上下滑动及宽高问题(一)
  8. 12个免费的从文本到语音转换 的在线服务和工具
  9. docker 单节点服务编排部署指南(docker-compose)
  10. 记一次腾讯社招前端面试(已拿到offer入职)