UOJ 题面传送门

看到 \(k\) 次方的期望可以很自然地想到利用低次方和维护高次方和的套路进行处理,不过。由于这里的 \(k\) 达到 \(5\),直接这么处理一来繁琐,二来会爆 long long,因此考虑另辟蹊径。注意到答案 \(\le 2^{63}-1\),也就是说当 \(k\) 比较大时值域也不会太大。因此考虑对 \(k\) 分类讨论。

\(k=1\) 时考虑计算每一位的贡献,注意到对于一位 \(i\),如果存在某个 \(a_j\) 满足 \(a_j\) 的 \(2^i\) 位为 \(1\),那么这一位在子集异或和中为 \(1\) 的概率就是 \(\dfrac{1}{2}\)。否则这一位自然不可能异或出 \(0\) 来,对答案的贡献自然就是 \(0\),贡献随便加一下即可。

\(k=2\) 时考虑用低次方和维护高次方和的套路,假设 \(x=2^{b_1}+2^{b_2}+\cdots+2^{b_k}\),那么显然有 \(x^2=(2^{b_1}+2^{b_2}+\cdots+2^{b_k})^2=\sum\limits_{i=1}^k\sum\limits_{j=1}^k2^{b_i}·2^{b_j}\),也就是说我们考虑每两个在异或和中同时为 \(1\) 的位 \(i,j\),答案加上 \(2^i,2^j\) 在 \(x\) 中同时为 \(1\) 的概率乘上 \(2^{i+j}\) 的和。考虑枚举 \(i,j\) 计算 \(2^i,2^j\) 位在 \(x\) 中同时为 \(1\) 的概率,显然满足不存在任何一个 \(a_p\) 的第 \(i\) 位为 \(1\),或者不存在任何一个 \(a_p\) 的第 \(i\) 位为 \(1\),那么 \(2^i,2^j\) 位在 \(x\) 中同时出现的概率为 \(0\)。否则如果对于任意 \(a_p\) 都有 \(a_p\) 的第 \(i,j\) 位同时为 \(0\) 或者同时为 \(1\),那么 \(2^i,2^j\) 在 \(x\) 中同时出现的概率为 \(\dfrac{1}{2}\),否则 \(2^i,2^j\) 在 \(x\) 中同时出现的概率为 \(\dfrac{1}{4}\),贡献累加一下即可。

\(k\ge 3\) 时我们考虑建出原序列的线性基,显然对于不在线性基中的元素,我们删除它们后答案不会发生变化。由于题目保证了答案 \(\le 2^{63}-1\),因此线性基中的个数不会太多。精确地估算一下大概就 \(\sum\limits_{i=0}^{2^p-1}x^3\) 是关于 \(2^p\) 的四次多项式,再除以一个 \(2^p\) 是关于 \(2^p\) 的三次多项式,当 \(p=22\) 时 \(4194304^3\) 就已经超过了 ull 的范围,就算乘上个小常数也超过了 \(2^{63}\),因此暴搜即可。

可以证明此题答案小数点后最多只有一位,证明大概就仿照 \(k=2\) 的思路,考虑枚举 \(k\) 位 \(b_1,b_2,b_3,\cdots,b_k\),答案加上 \(b_1,b_2,\cdots,b_k\) 位同时为 \(1\) 的概率乘上 \(2^{b_1+b_2+\cdots+b_k}\)。我们假设 \(b_1,b_2,b_3,\cdots,b_k\) 中不同数的个数为 \(c\),那么这些位产生的贡献应是某个整数乘上 \(2^{b_1+b_2+\cdots+b_k-c}\),分析一下可知当 \(b_i=0,c=1\) 时 \(2^{b_1+b_2+\cdots+b_k-c}\) 取到最小值 \(0.5\),因此此题小数点后最多只有一位 0.5

const int MAXN=1e5;
const int LOG_N=64;
int n,k,flg[LOG_N+2];u64 a[MAXN+5];
void print(u64 x){
printf("%llu",x>>1);
if(x&1) printf(".5");
}
namespace sub{
u64 b[LOG_N+2];
__int128_t res=0;int tot=0;
void insert(u64 x){
for(int i=LOG_N-1;~i;i--) if(x>>i&1){
if(!b[i]) return b[i]=x,void();
x^=b[i];
}
}
void dfs(int x,u64 sm){
if(x==LOG_N+1){
__int128_t mul=1;
for(int i=1;i<=k;i++) mul*=sm;
res+=mul;tot++;return;
} dfs(x+1,sm);
if(b[x]) dfs(x+1,sm^b[x]);
}
void solve(){
for(int i=1;i<=n;i++) insert(a[i]);
dfs(0,0);
if(tot!=1) res/=(tot/2);
else res*=2;
print((u64)res);
}
}
int main(){
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++) scanf("%llu",&a[i]);
if(k==1){
u64 res=0;
for(int i=0;i<LOG_N;i++){
bool has1=0;
for(int j=1;j<=n;j++) has1|=(a[j]>>i&1);
if(has1) res+=1ull<<i;
} print(res);
} else if(k==2){
u64 res=0;
for(int i=0;i<LOG_N;i++) for(int j=1;j<=n;j++) flg[i]|=(a[j]>>i&1);
for(int i=0;i<LOG_N;i++) for(int j=0;j<LOG_N;j++){
bool sm=1;
if(!flg[i]||!flg[j]) continue;
for(int k=1;k<=n;k++) sm&=(!((a[k]>>i&1)^(a[k]>>j&1)));
if(sm) res+=1ull<<(i+j);
else res+=1ull<<(i+j-1);
} print(res);
} else sub::solve();
return 0;
}

UOJ #36 -【清华集训2014】玛里苟斯(线性基+暴搜)的更多相关文章

  1. uoj #46[清华集训2014]玄学

    uoj 因为询问是关于一段连续区间内的操作的,所以对操作构建线段树,这里每个点维护若干个不交的区间,每个区间\((l,r,a,b)\)表示区间\([l,r]\)内的数要变成\(ax+b\) 每次把新操 ...

  2. UOJ.41.[清华集训2014]矩阵变换(稳定婚姻)

    题目链接 稳定婚姻问题:有n个男生n个女生,每个男/女生对每个女/男生有一个不同的喜爱程度.给每个人选择配偶. 若不存在 x,y未匹配,且x喜欢y胜过喜欢x当前的配偶,y喜欢x也胜过y当前的配偶 的完 ...

  3. bzoj 3816&&uoj #41. [清华集训2014]矩阵变换

    稳定婚姻问题: 有n个男生,n个女生,所有女生在每个男生眼里有个排名,反之一样. 将男生和女生两两配对,保证不会出现婚姻不稳定的问题. 即A-1,B-2 而A更喜欢2,2更喜欢A. 算法流程: 每次男 ...

  4. uoj 41 【清华集训2014】矩阵变换 婚姻稳定问题

    [清华集训2014]矩阵变换 Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://uoj.ac/problem/41 Description 给出 ...

  5. AC日记——【清华集训2014】奇数国 uoj 38

    #38. [清华集训2014]奇数国 思路: 题目中的number与product不想冲: 即为number与product互素: 所以,求phi(product)即可: 除一个数等同于在模的意义下乘 ...

  6. [UOJ#274][清华集训2016]温暖会指引我们前行

    [UOJ#274][清华集训2016]温暖会指引我们前行 试题描述 寒冬又一次肆虐了北国大地 无情的北风穿透了人们御寒的衣物 可怜虫们在冬夜中发出无助的哀嚎 “冻死宝宝了!” 这时 远处的天边出现了一 ...

  7. UOJ#36. 【清华集训2014】玛里苟斯 线性基

    原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ36.html 题解 按照 $k$ 分类讨论: k=1 : 我们考虑每一位的贡献.若有至少一个数第 $i$ ...

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

    传送门 为啥在我看来完全不知道为什么的在大佬们看来全都是显然-- 考虑\(k=1\)的情况,如果序列中有某一个\(a_j\)的第\(i\)位为\(1\),那么\(x\)的第\(i\)位为\(1\)的概 ...

  9. UOJ #36「清华集训2014」玛里苟斯

    这怎么想得到啊......... UOJ #36 题意:求随机一个集合的子集的异或和的$k$次方的期望值,保证答案$ \lt 2^{63},1 \leq k \leq 5$ $ Solution:$ ...

随机推荐

  1. jmeter基础功能及认识

    1.基础知识: JMeter是免费开源的,纯java开发的性能测试工具,可以测试静态和动态的资源,例如:静态文件.java服务小程序.CGI脚本.java对象.数据库.FTP服务器.邮件服务器和Per ...

  2. freemarker中使用String字符串作为模板

    在日常开发中,我们有时候需要发送短信.邮件等通知,但是这些通知的内容通常都是动态的,而且可能会发生变动,为了程序的灵活性,我们通常会将通知的内容配置在页面上,然后后台通过渲染这些模板,来获取具体的内容 ...

  3. Noip模拟14 2021.7.13

    T1 队长快跑 本身dp就不强的小马看到这题并未反映过来是个dp(可能是跟题面太过于像那个黑题的队长快跑相似) 总之,基础dp也没搞出来,不过这题倒是启发了小马以后考试要往dp哪里想想 $dp_{i, ...

  4. 2021.9.18考试总结[NOIP模拟56]

    T1 爆零 贪心地想,肯定要先走完整个子树再走下一个,且要尽量晚地走深度大的叶子.所以对每个点的儿子以子树树高为关键字排序$DFS$即可. 也可$DP$. $code:$ T1 #include< ...

  5. 电脑cmd命令快速查看连接过的WIFI密码信息

    只是突然发现,好奇心作怪,试了一下,妈妈再也不用担心我忘记家里的wifi密码了 1.直接打开"运行"(win键+R) 2.输入CMD 确定 3.输入下面cmd命令.鼠标粘贴 for ...

  6. Python课程笔记(六)

    今天上课补上了上次未学完比较重点的鼠标和键盘事件,同时开始学习运用turtle进行绘图. 本次课程的代码: https://gitee.com/wang_ming_er/python_course_l ...

  7. zabbix 报警发送企业威信

    1.组册企业微信,创建应用 2.下载脚本文件: https://raw.githubusercontent.com/OneOaaS/weixin-alert/master/weixin_linux_a ...

  8. Red Hat Enterprise Linux (RHEL) 9 更新了什么,即 Rocky Linux 9 和 AlmaLinux 9 展望

    请访问原文链接:https://sysin.org/blog/rhel-9-vision/,查看最新版.原创作品,转载请保留出处. 作者:gc(at)sysin.org,主页:www.sysin.or ...

  9. docker容器命令(一)

    容器命令 创建容器:docker run 参数: -it 交互 -d 后台 –name 容器名 -p 主机端口:容器端口 (主机端口映射到docker端口) docker run --name cen ...

  10. SpringCloud 2020.0.4 系列之 Sleuth + Zipkin

    1. 概述 老话说的好:安全不能带来财富,但盲目的冒险也是不可取的,大胆筹划,小心实施才是上策. 言归正传,微服务的特点就是服务多,服务间的互相调用也很复杂,就像一张关系网,因此为了更好的定位故障和优 ...