• 清华集训2014 玛里苟斯
  • 求子集异或和k次方的期望。
  • 异或考虑按位算贡献。
  • 对于\(K=1\),考虑异或和\(\frac{x}{2}\)就是答案。
  • 证明简单来说就是,你可以先打一个概率\(dp\)分别对每一位来考虑。
  • 假设当前考虑的位数是\(j\),如果\(i\)这个数是\(0\),那么选和不选的影响都是不改变原来的选取,如果\(i\)这个数是\(1\),那么选与不选是对称的,也就是把原来\(0\)和\(1\)的概率相互交换。
  • 实际上我们在模拟一个或运算。
  • 对于\(K=2\),首先每一位如果有数,都会贡献\(4^j\)答案。
  • 如果异或和的第i位和第j为都有数,会贡献\(2^{i+j-1}\)的答案,因为同时出现的概率是\(\frac {1}{4}\)
  • 但是如果两位不是互相独立的,贡献的答案应该是\(2^{i+j}\),因为同时出现的概率是\(\frac {1}{2}\)
  • \(k>=3\),首先,线性基的定义就证明了,一个数集的异或子集,和他随便乱异或的数集的异或子集是等效的。
  • 所以可以线性基直接消掉线性相关的数。
  • 由于答案在\(2^{63}\)以内,所以线性基的大小不会超过\(22\),直接暴力枚举计算期望。
  • 这题有一个结论是答案两倍一定是整数,也就是答案的小数最多有一位;
  • \(k\leq3\)比较好证,但是\(k>3\)怎么证明啊……??
  • upd,找到证明了
#include<bits/stdc++.h>
#define R register int
#define db long double
#define ll unsigned long long
using namespace std;
const int N=200001;
int n,K;ll w[N];
ll gi(){ll x=0;R k=1;char c=getchar();while(c!='-'&&(c<'0'||c>'9'))c=getchar();if(c=='-')k=-1,c=getchar();while(c<='9'&&c>='0')x=(x<<3)+(x<<1)+c-'0',c=getchar();return x*k;
}
namespace cpp1{ll ans;void Main(){for(R i=1;i<=n;++i)ans|=w[i];printf("%lld",ans>>1ll);if(ans&1)cout<<".5";}
}
namespace cpp2{int hv[33];ll ans,res;int check(R p,R q){for(R i=1;i<=n;++i){if((w[i]&(1<<p))&&!(w[i]&(1<<q)))return 1;if((w[i]&(1<<q))&&!(w[i]&(1<<p)))return 1;}return 0;}void Main(){for(R i=1;i<=n;++i)res|=w[i];for(R i=0;i<33;++i){if((res&(1ll<<i))==0)continue;ans+=(1ll<<(i+i));for(R j=i+1;j<33;++j)if(res&(1ll<<j)){if(check(i,j))ans+=(1ll<<(i+j));else ans+=(2ll<<(i+j));}}printf("%lld",ans>>1);puts(ans&1?".5":"");}
}
namespace cpp3{int Mx,tot,len;ll res,num[300],now[300];__int128 ans;void ins(ll x){for(R j=0;j<Mx;++j){if((x&(1<<j))==0)continue;if(!num[j]){num[j]=x;return ;}x^=num[j];}}void Dfs(R i,ll nw){if(i==len+1){__int128 fin=1;for(R j=1;j<=K;++j)fin*=nw;ans+=fin,tot++;return ;}Dfs(i+1,nw),Dfs(i+1,nw^now[i]);}void Main(){for(R i=1;i<=n;++i){ll x=w[i];R nw=0;while(x)nw++,x>>=1;Mx=max(Mx,nw),res|=w[i];}for(R i=1;i<=n;++i)ins(w[i]);for(R i=0;i<Mx;++i)if(num[i])now[++len]=num[i];Dfs(1,0),ans>>=(len-1);ll res=ans>>1;printf("%lld",res),puts((ans&1)?".5":"");}
}
int main(){n=gi(),K=gi();for(R i=1;i<=n;++i)w[i]=gi();if(K==1)cpp1::Main();if(K==2)cpp2::Main();if(K>=3)cpp3::Main();return 0;
}

转载于:https://www.cnblogs.com/Tyher/p/10062176.html

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

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

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

  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. djangorestframework源码分析2:serializer序列化数据的执行流程
  2. Delphi 的编译指令(1): $DEFINE、$UNDEF、$IFDEF、$ELSE、$ENDI
  3. QT中文显示乱码解决
  4. 美国本科计算机科学,美国本科计算机科学就业情况分析
  5. java反射 初始化bean_通用javabean初始化(反射机制)
  6. ABAP里的OAuth2.0 Standard Package
  7. 搜狗浏览器缓冲区溢出漏洞EXP
  8. python修改zip文件内容_windows-将zip文件内容提取到Python 2.7中的特定目录
  9. 前端如何提示自己的技术水平
  10. java中返回怎样返回,java-如何显示方法是否可以返回nu
  11. Shell脚本编程30分钟入门学习
  12. MK808 vs Raspberry Pi
  13. Chrome插件(扩展)开发全攻略
  14. [《雪的散文诗》小个子的诗集]2012年8月28日
  15. 安卓投屏传输手机声音到电脑最简单的方式
  16. leetcode 给我上了深深的一课,被删掉所有题解后的我感动了
  17. [蓝桥杯] 三升序列 python解法
  18. Facebook 申请蓝色认徽章
  19. python人民币转大写_python2.x实现人民币转大写人民币
  20. Java基础习题(四)

热门文章

  1. MySQL--死锁的原因及解决方法
  2. 360类redis存储服务Pika的安装和使用
  3. 解决pdf不能打印,不能注释,不能修改,不能保存等文档限制
  4. electron打开文件的几种实现方式
  5. 【软件工程】 软件设计阶段
  6. BIOS 和 EFI 启动光盘制作
  7. Unity 中国区总经理符国新:3D引擎开发
  8. 0基础跟班学习前端的第三天(因为上完一次课需要上一天自习啦~)内容整理归纳还有附带的小练习~希望大家多动手练习(二)
  9. mac磁盘工具制作dmg映像文件
  10. Alwayson 同步模式的坑