想像一下,我们将异或值x拆成若干个2的次方加在一起,那么k次方的意义便是:
从这些2次方中挑出k个(有序)2次方,将它们乘起来的和。
具体一点,bi是x的二进制表达从右往左的第i+1位,于是x可以拆成

而k次方要求我们求从中挑出k个项(有序,可以重复选同一项)的和
我们令ai,j表示ai二进制上第j位的数
第一步
我们先证明这些异或值的期望的小数部分必然为0.5或没有
我们从中挑出k个,记为



才会有贡献
考虑有多少个子集满足条件
我们相当于要求解x1~xn,满足




可以轻松地判断有没有解(即不存在一行的a全是0)
然后,有解的话,
这会是一个高斯消元法解异或方程,解的个数为2^(n-非零行的个数)
注意这里由于可能会有li=lj,但i!=j,所以这里的解方程需要去掉相同的若干行
设非零行有y行
那么贡献为

注意到,y意味着至多有y个不同的l,所以这些不同的l中至少有y-1是正的
即整体l的和(算重)是大于等于y-1的
故小数位要么为0,要么为0.5
第二步
通过答案小于2^64,我们得出一个很重要的性质:
k=1:ai<2^64
k=2:ai<2^32
k=3:ai<2^21
k=4:ai<2^16
k=5:ai<2^13
对于k=1和2,按照我们刚才的统计方式即可。
具体一点,就是枚举l,算出对应的贡献
对于k>2,我们有一个很明显的性质,
对于集合A和ai,若集合A的异或和为ai且ai不属于A,
去掉ai后答案不变。
我们可以用线性基实现去掉ai
显然,剩下的数最多21个
爆搜即可
最后统计答案时有些细节注意一下即可。

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
typedef unsigned long long ull;
int n,k;
#define Maxn 1000010
ull a[Maxn];
ull num[70];
ull b[70];
int cnt=0;
ull Ans1=0,Ans2=0;
ull All=0;
void dfs(int u,ull ans){if(u==cnt+1){ull t1=0,t2=1;for(int i=1;i<=k;++i){t2*=ans;t1*=ans;t1+=(t2>>cnt);t2&=All;}Ans1+=t1;Ans2+=t2;if(Ans2>All)Ans1++,Ans2&=All;return;}dfs(u+1,ans);dfs(u+1,ans^b[u]);
}
int main(){scanf("%d%d",&n,&k);for(register int i=1;i<=n;++i)scanf("%llu",&a[i]);if(k==1){for(register int i=1;i<=n;++i)All|=a[i];ull Ans=0;for(int i=0;i<=63;++i)if(All&(1ull<<i))Ans=(Ans+(1ull<<i));if(Ans&1)printf("%llu.5\n",Ans/2ull);else printf("%llu\n",Ans/2ull);return 0;}if(k==2){ull Ans=0;for(register int i=1;i<=n;++i)All|=a[i];for(register int i=0;i<=31;++i)for(register int j=i;j<=31;++j)if((All&(1ull<<i))&&(All&(1ull<<j)))Ans=(Ans+(1ull<<(i+j)));if(Ans&1)printf("%llu.5\n",Ans/2ull);else printf("%llu\n",Ans/2ull);return 0;}for(register int i=1;i<=n;++i){ull pre=a[i];for(register int j=20;j>=0;--j)if(a[i]&(1ull<<j)){if(!num[j]){num[j]=a[i];break;}a[i]^=num[j];}if(a[i])b[++cnt]=pre;}All=(1<<cnt)-1;dfs(1,0);if(Ans2)printf("%llu.5\n",Ans1);else printf("%llu\n",Ans1);return 0;
}

[清华集训D1T1][Bzoj 3811][思维+线性基]玛里苟斯相关推荐

  1. BZOJ 4184 shallot 线性基+分治

    Description 小苗去市场上买了一捆小葱苗,她突然一时兴起,于是她在每颗小葱苗上写上一个数字,然后把小葱叫过来玩游戏. 每个时刻她会给小葱一颗小葱苗或者是从小葱手里拿走一颗小葱苗,并且让小葱从 ...

  2. BZOJ 4184: shallot 线性基+线段树分治

    复习一下线性基 ~ code: #include <cmath> #include <vector> #include <cstdio> #include < ...

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

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

  4. bzoj 3811 玛里苟斯 - 线性基

    题目传送门 传送门I 传送门II 题目大意 给定集合$S$,问集合$S$的任意选一个子集的异或和的$k$次幂期望. 保证答案在$2^{63}$内. 注意到答案在$2^{63}$内,所以,当$k \ge ...

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

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

  6. bzoj 3811: 玛里苟斯(期望+线性基)

    3811: 玛里苟斯 Time Limit: 10 Sec  Memory Limit: 256 MB Submit: 223  Solved: 98 [Submit][Status][Discuss ...

  7. [BZOJ 3811]玛里苟斯(线性基)尽量理解的题解

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

  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. QIIME 2教程. 15样品分类和回归q2-sample-classifier(2020.11)
  2. flex-10 flexfabric区别
  3. MVC4学习笔记(二)- MVC设计实例,5分钟内完成你的Mvc项目
  4. 【12】行为型-观察者模式
  5. SAP Spartacus Component-wrapper.directive.ts launch Component的三个参数
  6. 1张手稿图讲明白 Kubernetes 是怎么运行的
  7. 【渝粤教育】国家开放大学2018年秋季 0350-21T幼儿园课程论 参考试题
  8. SpringNBoot日志配置
  9. nginx配置及操作简要记录
  10. 计算机培训实践反思模板,基于问题解决式课堂教学模式的反思
  11. dma循环刷新oled屏幕
  12. 2021 CSC加拿大出国签证、贴签、机票申请材料汇总
  13. ESP32-C3入门教程 基础篇(八、NVS — 非易失性存储库的使用)
  14. wireshark怎么抓包、wireshark抓包详细图文教程
  15. Android 实战项目汇总
  16. 网关、子网掩码、DNS的设置
  17. su linux pe,CГіmo encontrar individuos por su DNI en la red? GuГ­a transito a transito
  18. 安信可 ESP8266 12F Flash操作
  19. XP系统经典故障FAQ
  20. arm汇编的学习笔记,对比x86和arm(1)-从最简单的函数谈起

热门文章

  1. dell 服务器硬盘购买,戴尔_PowerEdge T640_塔式存储服务器_网络存储服务器_在线购买 | Dell 中国大陆...
  2. 四旋翼惯导融合之观测传感器滞后问题汇总与巴特沃斯低通滤波器设计(气压计MS5611、GPS模块M8N、超声波、PX4FLOW等)
  3. 基于ArcGIS API for WPF路径分析源码实例
  4. 企业微信接收信息服务器全代码,微信企业号的消息和事件的接收处理及解密
  5. 办公记事软件哪个好用?工作日志记录软件哪个好?
  6. 软件外包公司入职须知
  7. 暴雪和黑客的战争三:黑客的反击
  8. image-compressors前端图片压缩工具
  9. 动网论坛后台显示不了
  10. dvd手机到linux,如何在Linux上播放DVD和蓝光? | MOS86