uoj#36. 【清华集训2014】玛里苟斯(线性基+概率期望)
为啥在我看来完全不知道为什么的在大佬们看来全都是显然……
考虑\(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;
}
uoj#36. 【清华集训2014】玛里苟斯(线性基+概率期望)的更多相关文章
- BZOJ3811 玛里苟斯(线性基+概率期望)
k=1的话非常好做,每个有1的位都有一半可能性提供贡献.由组合数的一些性质非常容易证明. k=2的话,平方的式子展开可以发现要计算的是每一对位提供的贡献,于是需要计算每一对位被同时选中的概率.找出所有 ...
- uoj #46[清华集训2014]玄学
uoj 因为询问是关于一段连续区间内的操作的,所以对操作构建线段树,这里每个点维护若干个不交的区间,每个区间\((l,r,a,b)\)表示区间\([l,r]\)内的数要变成\(ax+b\) 每次把新操 ...
- UOJ.41.[清华集训2014]矩阵变换(稳定婚姻)
题目链接 稳定婚姻问题:有n个男生n个女生,每个男/女生对每个女/男生有一个不同的喜爱程度.给每个人选择配偶. 若不存在 x,y未匹配,且x喜欢y胜过喜欢x当前的配偶,y喜欢x也胜过y当前的配偶 的完 ...
- bzoj 3816&&uoj #41. [清华集训2014]矩阵变换
稳定婚姻问题: 有n个男生,n个女生,所有女生在每个男生眼里有个排名,反之一样. 将男生和女生两两配对,保证不会出现婚姻不稳定的问题. 即A-1,B-2 而A更喜欢2,2更喜欢A. 算法流程: 每次男 ...
- uoj 41 【清华集训2014】矩阵变换 婚姻稳定问题
[清华集训2014]矩阵变换 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://uoj.ac/problem/41 Description 给出 ...
- AC日记——【清华集训2014】奇数国 uoj 38
#38. [清华集训2014]奇数国 思路: 题目中的number与product不想冲: 即为number与product互素: 所以,求phi(product)即可: 除一个数等同于在模的意义下乘 ...
- [UOJ#274][清华集训2016]温暖会指引我们前行
[UOJ#274][清华集训2016]温暖会指引我们前行 试题描述 寒冬又一次肆虐了北国大地 无情的北风穿透了人们御寒的衣物 可怜虫们在冬夜中发出无助的哀嚎 “冻死宝宝了!” 这时 远处的天边出现了一 ...
- UOJ #36 -【清华集训2014】玛里苟斯(线性基+暴搜)
UOJ 题面传送门 看到 \(k\) 次方的期望可以很自然地想到利用低次方和维护高次方和的套路进行处理,不过.由于这里的 \(k\) 达到 \(5\),直接这么处理一来繁琐,二来会爆 long lon ...
- UOJ#36. 【清华集训2014】玛里苟斯 线性基
原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ36.html 题解 按照 $k$ 分类讨论: k=1 : 我们考虑每一位的贡献.若有至少一个数第 $i$ ...
随机推荐
- MVC+Ext.net零基础学习记录(二)
很多人在开发一个新的项目时,需要先决定项目的整体架构,是决定使用MVC的同时也不例外,具体包含:项目的多语言性,项目的多风格选择,项目的可扩展性 其中项目的多语言性:http://www.cnblog ...
- Linux-3.14.12内存管理笔记【kmalloc与kfree实现】【转】
本文转载自:http://blog.chinaunix.net/uid-26859697-id-5573776.html kmalloc()是基于slab/slob/slub分配分配算法上实现的,不少 ...
- Protothread 机制
一.概述 很多传感器操作系统都是基于事件驱动模型的,事件驱动模型不用为每个进程都分配一个进程栈,这对内存资源受限的无线传感器网络嵌入式系统尤为重要. 然而事件驱动模型不支持阻塞等待抽象语句,因此程序员 ...
- 简单的可兼容所有浏览器的操作html元素的javascript框架
1.根据id名称取元素 $id(idName) 2.根据class定义取元素 $class(className)返回所有class被定义成className的元素数组,或者$Eclass(clas ...
- 简洁多用途SuperSlide插件—tab标签样式
简洁多用途SuperSlide插件—tab标签切换代码样式,由huiyi8素材网提供. 源码:http://www.huiyi8.com/tab/
- redis持久化【转】
Redis是一种高级key-value数据库.它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富.有字符串,链表,集 合和有序集合.支持在服务器端计算集合的并,交和补集(diff ...
- swoole+nginx反向代理
nginx配置: server { listen 80; server_name www.swoole.com; root /data/wwwroot/www.swoole.com; location ...
- AtCoder Regular Contest E - Or Plus Max
Time limit : 2sec / Memory limit : 1024MB Score : 700 points Problem Statement There is an integer s ...
- MySQL学习_计算用户支付方式占比_20161104
计算用户支付方式占比 SELECT b.*#根据城市ID 年月排序 FROM ( SELECT a.* FROM ( #纵向合并 SELECT b1.ID,a1.城市,a1.收款方式,DATE_FOR ...
- P2936(BZOJ3396) [USACO09JAN]全流Total Flow[最大流]
题 裸题不多说,在网络流的练习题里,你甚至可以使用暴力. #include<bits/stdc++.h> using namespace std; typedef long long ll ...