BZOJ.3811.玛里苟斯(线性基)

BZOJ
UOJ

感觉网上大部分题解对我这种数学基础差的人来说十分不友好...(虽然理解后也觉得没有那么难)
结合两篇写的比较好的详细写一写。如果有错要指出啊QAQ
https://blog.csdn.net/smallsxj/article/details/73205569
https://www.cnblogs.com/wujiechao/p/7781140.html


首先题目要求输出精确的小数,由下面的推导可知答案要么是整数,要么是一位小数\(.5\),不会是\(.25,\ .125\)什么的。
\(k\)讨论,先以\(k=2\)为例,假设期望异或和是\(S\),把它二进制拆分,每一位记为\(b_i=0/1\),那么答案是\((b_02^0+b_12^1+...+b_m2^m)(b_02^0+b_12^1+...+b_m2^m)=b_0b_02^0+b_0b_12^1+b_0b_22^2+...b_mb_m2^{m+m}\)\(=\sum_i\sum_jb_ib_j2^{i+j}\)
那么对于\(b_i,b_j\),它的贡献是\(\frac{P}{2^n}\times2^{i+j}\)\(P\)\(i,j\)两位都为\(1\)的方案数。
那么用\(b_{i,j}\)表示第\(i\)个数二进制拆分后的第\(j\)位,\(x_i\)表示这个数是否存在于选出的集合中,求\(i,j\)位都为\(1\)的方案数,可以列个方程组:
\[\begin{matrix}x_1b_{1,0}\oplus x_2b_{2,0}\oplus...\oplus x_nb_{n,0}=0/1\\x_1b_{1,0}\oplus x_2b_{2,0}\oplus...\oplus x_nb_{n,0}=0/1\\\dots\\x_1b_{1,i}\oplus x_2b_{2,i}\oplus...\oplus x_nb_{n,i}=1\\\dots\\x_1b_{1,j}\oplus x_2b_{2,j}\oplus...\oplus x_nb_{n,j}=1\\\dots\\x_1b_{1,m}\oplus x_2b_{2,m}\oplus...\oplus x_nb_{n,m}=0/1\end{matrix}\]

(个人感觉这里除去\(i,j\)的方程的右式应该是\(0/1\)吧,那篇博客里写的是\(0\)
解这个方程组,可以发现只会有\(t\leq k\)\(x_i\)是有唯一解的,其它\(n-t\)\(x_i\)都有两解。所以方案数为\(2^{n-t}\),贡献就为\(2^{i+j-t}\)
\(i\neq j\)时,\(i+j\geq1,\ t\leq2\),所以\(2^{i+j-t}\geq0.5\)
\(i=j\)时,\(i+j\geq0,\ t\leq1\),依旧有\(2^{i+j-t}\geq0.5\)
扩展到\(k\geq2\)的情况,设选出的位有\(k'\)位是互不相同的,设为\(i,j,l...\),那么方程组中右式为\(1\)的等式有\(k'\)个,且\(i+j+l+...\geq0+1+2+...=\frac{k(k-1)}{2}\geq k-1\geq t-1\),所以\(i+j+l+...-t\geq-1\),贡献\(2^{i+j+l+...-t}\geq0.5\)
\(k=1\)时,显然也成立。
综上,答案要么是整数,要么是一位小数\(.5\)


其次要注意的是数据范围。答案小于\(2^{63}\),那么似乎就有\(a_i^k\lt2^{63}\)\(a_i\lt\frac{2^{63}}{k}\)
但是个人认为,比如\(k=1\)\(a_i\lt2^{63}\),但是存在\(2^{63}\leq a_i\lt2^{64}\)也是可以的,因为毕竟是求平均值,多一位还是可能被拉低到下一位去的。所以应该是\(a_i\lt\frac{2^{64}}{k}\)\(k=1\)需要unsigned long long)。
然而没见到有人这么写的(写范围的都是\(a_i\lt\frac{2^{63}}{k}\))...那我就不知道为啥都开的unsigned long long了。
看了下数据,确实最大值是18446727131960884031\(>2^{63}\)。(答案是\(2^{63}-0.5\) 233好强大)


考虑怎么做。对\(k\)分别求解。

\(k=1\)
对每一位分别考虑。设某一位为\(1\)的数有\(t\)个,为\(0\)的有\(n-t\)个,那么选出奇数个该位为\(1\)的方案数是:\(\sum_{i\ is\ odd}C_n^i2^{n-t}\),偶数个的方案数是\(\sum_{i\ is\ even}C_n^i2^{n-t}\)
\(C_n^1+C_n^3+C_n^5+...=2^{n-1}=C_n^0+C_n^2+C_n^4...\)
也就是选出该位为\(1\)的数的个数为奇数和偶数的概率是一样的。那么只要\(t\geq0\),该位为\(1\)\(0\)的概率是一样的。
所以求一下哪些位上出现过\(1\),加起来除以\(2\)就好了。

\(k=2\)
上面说了答案可以写成\(\sum_i\sum_jb_ib_j2^{i+j}\)。可以直接\(\log^2\)枚举\(i,j\)
\(b_i\)\(1\)的概率和\(k=1\)时的情况一样,如果存在一个数第\(i\)位为\(1\),那么就是\(\frac12\),否则是\(0\)。所以如果存在数第\(i\)位不为\(0\)且存在数第\(j\)位不为\(0\),那么贡献就是\(\frac14\times2^{i+j}\)
需要注意的是如果每个数\(i,j\)位都相同且至少存在一个数满足\(i,j\)位不为\(1\),那么\(i,j\)\(1\)是同时出现的,概率是\(\frac12\)

\(k\geq3\)
此时\(a_i\lt2^{22}\),线性基中的元素个数不超过\(22\),所以可以直接\(2^{cnt}\)枚举线性基中元素集合(设线性基元素个数为\(cnt\))。
线性基中每个子集出现的概率都是\(2^n\times2^{n-cnt}=\frac{1}{2^{cnt}}\),求出子集异或和\(x^k\)后除一下即可。
需要注意的是除\(2^{cnt}\)之前\(x^k\)是可以超过\(2^{63}\)的。需要把\(x\)表示成\(\lfloor\frac{x}{2^{cnt}}\rfloor\times2^{cnt}+x\%2^{cnt}\)
因为有\(\lfloor\frac{x^k}{2^{cnt}}\rfloor\times x+\lfloor\frac{(x^k\%2^{cnt})\times x}{2^{cnt}}\rfloor=\lfloor\frac{x^{k+1}}{2^{cnt}}\rfloor\)

证明:令\(x^k=a\times2^{cnt}+b\ (b<2^{cnt})\),那么等式左边\(=ax+\lfloor\frac{bx}{2^{cnt}}\rfloor\),等式右边\(=\lfloor\frac{x^k\times x}{2^{cnt}}\rfloor=\lfloor\frac{ax2^{cnt}+bx}{2^{cnt}}\rfloor=ax+\lfloor\frac{bx}{2^{cnt}}\rfloor=左式\)


//2096kb    728ms
#include <cstdio>
#include <cctype>
#include <algorithm>
//#define gc() getchar()
#define MAXIN 500000
#define gc() (SS==TT&&(TT=(SS=IN)+fread(IN,1,MAXIN,stdin),SS==TT)?EOF:*SS++)
typedef long long LL;
typedef unsigned long long ull;
const int N=1e5+5;ull A[N];
int cnt,base[30],b[30];
char IN[MAXIN],*SS=IN,*TT=IN;inline ull read()
{ull now=0;register char c=gc();for(;!isdigit(c);c=gc());for(;isdigit(c);now=now*10+c-48,c=gc());return now;
}
void Subtask1(int n)
{ull ans=0;for(int i=1; i<=n; ++i) ans|=A[i];printf("%llu",ans>>1);if(ans&1) printf(".5");putchar('\n');
}
void Subtask2(int n)
{ull x=0,y=0;for(int a=0; a<32; ++a){bool f1=0;for(int i=1; i<=n; ++i) if(A[i]>>a&1) {f1=1; break;}if(!f1) continue;for(int b=0; b<32; ++b){bool f2=0;for(int i=1; i<=n; ++i) if(A[i]>>b&1) {f2=1; break;}if(!f2) continue;bool f3=0;for(int i=1; i<=n; ++i) if((A[i]>>a&1)^(A[i]>>b&1)) {f3=1; break;}if(a+b-f3-1>=0) x+=1ull<<a+b-f3-1;else ++y;//+0.5}}printf("%llu",x+=y>>1);if(y&1) printf(".5");putchar('\n');
}
inline void Insert(int x)
{for(int i=21; ~i; --i)if(x>>i&1)if(base[i]) x^=base[i];else {b[cnt++]=base[i]=x; break;}
}
void Subtask3(int n,int K)
{for(int i=1; i<=n; ++i) Insert(A[i]);ull ansx=0,ansy=0;const int lim=1<<cnt;for(int s=0; s<lim; ++s){ull val=0,x=0,y=1;for(int i=0; i<cnt; ++i) s>>i&1&&(val^=b[i]);for(int i=1; i<=K; ++i)x*=val, y*=val, x+=y>>cnt, y&=lim-1;ansx+=x, ansy+=y;}ansx+=ansy>>cnt, ansy&=lim-1;printf("%llu",ansx);if(ansy) printf(".5");putchar('\n');
}int main()
{int n=read(),K=read();for(int i=1; i<=n; ++i) A[i]=read();if(K==1) Subtask1(n);else if(K==2) Subtask2(n);else Subtask3(n,K);return 0;
}

转载于:https://www.cnblogs.com/SovietPower/p/10510490.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/483979.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

理解云计算三种服务模式——IaaS、PaaS和SaaS

云计算的服务模式仍在不断进化&#xff0c;但业界普遍接受将云计算按照服务的提供方式划分为三个大类&#xff1a;SaaS&#xff08;Software as a Service–软件即服务&#xff09; PaaS&#xff08;Platform as a Service–平台即服务&#xff09; IaaS&#xff08;Infrastruc…

术,路,心:陈天桥的大脑行旅

来源&#xff1a; 脑极体在互联网、云计算与电动汽车之后&#xff0c;连同资本、产业、学术界在内的社会各界&#xff0c;纷纷开始将目光投向更远的地方。下一个超级机会藏在何处&#xff1f;下一个改变人类文明的技术机遇何时触发&#xff1f;随着各国开始在国家战略层面布局下…

8万行的insert数据,Ctrl+c、Ctrl+v后心态崩了(如何在Linux下对MySQL数据库执行sql文件)...

从最下面可以看到&#xff0c;差不多有86389行&#xff0c;Ctrlc、Ctrlv后 PHPstorm一直没有反应。。。。 肿么办&#xff1f;&#xff1f;复制粘贴不行的话&#xff0c;可以用什么方法把数据插入到数据库中&#xff0c;数据库用的是MySQL。 皇天不负有心人&#xff0c;卧薪尝胆…

链路状态路由协议与OSPF

链路状态路由算法&#xff08;LS算法&#xff09; 工作原理 每个路由器将自己的链路状态信息洪泛到网络上的所有路由器。tips:&#xff08;每个路由器都洪泛会给网络带来负担&#xff09;每个路由器最终会知道整个网络的拓扑结构&#xff08;LSDB&#xff09;。每个路由器使用…

计算机视觉之模板匹配算法、SIFT特征匹配与目标检测、相机标定、RANSAC算法简介

文章目录 前言摘要一、模板匹配算法1.1 算法原理简介1.2 数据结构及算法设计1.3 实验结果1.4 总结二、SIFT特征匹配与目标检测2.1 算法原理2.2 关键代码2.3 实验结果三、相机标定3.1 准备3.2 角点检测四、RANSAC 算法4.1 算法原理4.2 算法基本思想4.3 算法设计4.4 总结五、视频…

感知算法、规划地图……波士顿动力揭秘Atlas机器人跑酷背后的技术

来源&#xff1a;机器之心&#xff0c;编辑&#xff1a;nhyilin仅用于学术分享&#xff0c;版权属于原作者几天前&#xff0c;波士顿动力公司放出了双足人形机器人 Atlas 的最新酷炫视频。这次&#xff0c;Atlas 展示了它的最新技能「跑酷」。在一系列倾斜胶合板还有木箱垒成的…

第七届蓝桥杯省赛---蚂蚁感冒

长100厘米的细长直杆子上有n只蚂蚁。它们的头有的朝左&#xff0c;有的朝右。 每只蚂蚁都只能沿着杆子向前爬&#xff0c;速度是1厘米/秒。 当两只蚂蚁碰面时&#xff0c;它们会同时掉头往相反的方向爬行。 这些蚂蚁中&#xff0c;有1只蚂蚁感冒了。 并且在和其它蚂蚁碰面时&am…

BGP协议

概述 BGP是目前“唯一”的EGP协议&#xff0c;用于AS之间传递路由信息&#xff0c;目前版本为4 为什么需要BGP&#xff1f; 不同AS自治系统的管理部门不同&#xff0c;路由策略不同AS之间的路由不强调最优路径&#xff0c;更强调路由控制和路由策略 IGP与BGP对比 IGP关注如…

轮廓提取之滚球法、凹包算法

提示:本文章主要介绍轮廓提取算法------滚球法的运用,可用于提取点云等二维、三维数据的轮廓,以及代码框架设计。 文章目录 前言一、基于二维点数据的模型轮廓提取算法1.1 适用场景1.2 问题思考及解决方法1.3 点加密1.4 存储结构与设计思路二、关键代码设计2.1 滚球法2.2 极…

Science Robotics:新型多足机器人可自行组装,零件损坏时也能继续运动

来源&#xff1a;DeepTech深科技在自然环境中&#xff0c;群体昆虫&#xff08;如蜜蜂、蚂蚁、白蚁等&#xff09;、鱼类和鸟类等动物可以通过合作来完成生物个体难以或不可能完成的任务。受到这些集群行为的启发&#xff0c;许多研究人员研究了自组装或可重构的模块化群机器人…

NAT与DHCP协议

DHCP概述 DHCP产生的原因 大型网络中静态配置IP地址容易出现地址冲突 定义 DHCP&#xff1a;动态主机配置协议&#xff0c;用于主机自动获得IP地址、子网掩码、网关地址、DNS服务器地址&#xff0c;租用期等相关信息。采用C/S模式。DHCP给运行服务器软件、且位置固定的计算机…

OpenGL基础入门及准备

一、计算机图像学相关概念 1.1 计算机图形学&#xff0c;是一种使用数学算法将二维或三维图形转化为计算机显示器所能显示的二维栅格形式的科学。 1.2 屏幕像素组成的网格即称为栅格。 1.3 计算机图形学研究 Modeling&#xff1a;构造场景的三维模型&#xff0c;建模&#…

使用nodejs和art-template模板引擎实现apache的部分功能

升级一下上一篇的功能 首先还是配置&#xff1a;config.js module.exports {host: http://127.0.0.1, //主机名port: 3000, //服务器端口号documentRoot: E:/webdev, //根目录directoryBrowse: true, //是否开启目录浏览功能directoryIndex: [ //目录默…

哈佛商业评论:什么是颠覆性创新?

来源&#xff1a;点滴科技资讯什么是颠覆性创新&#xff1f;在引入该理论 20 年后&#xff0c;我们重新审视了它所解释的和未解释的。本文发表于哈佛商业评论&#xff08;2015 年 12 月&#xff09; 作者&#xff1a;克莱顿 M.克里斯滕森&#xff0c; 迈克尔E雷诺&#xff0c;和…

定长掩码地址划分与VLSM子网划分

定长掩码地址划分 案例 若某个公司得到一个C类网络地址210.33.15.0&#xff0c;假如所有子网的掩码都一样&#xff0c;该如何划分子网&#xff1f; 步骤一&#xff1a;确定子网个数 7个子网&#xff0c;其中4个局域网&#xff0c;3个广域网 步骤2&#xff1a;确定每个子网所需…

OpenGL之几何、投影、裁剪、视口变换以及全局变换与局部变换

一、变换的概念 1.1 图形流水线 1.2 变换&#xff08;Transformation&#xff09; 变换主要分为四个步骤&#xff0c;主要就是在Vertex operations阶段操作顶点信息&#xff0c;会在流水线中依次进行。 几何变换投影变换裁剪视口变换 三维模型到二维图形的主要变换过程&am…

WinForm中DataGridView的TextBoxColumm换行

一、内容超过显示宽度自动换行&#xff1a; 在需要自动换行的列中设置 二、换行符换行&#xff1a; 一开始在需要换行的文本添加"\r\n"并不能直接换行&#xff0c;DGV直接把\r\n显示出来了&#xff0c;后换成 System.Environment.NewLine 解决问题转载于:https://www…

无类别地址CIDR概述

问题 IPv4的地址空间最终将全部耗尽子网掩码无法改变IP地址的分配方式&#xff0c;无法缓解IP地址危机 CIDR概述 CIDR是无类别域间路由CIDR取消了IP地址的分类限制&#xff0c;可以取IP地址的任意前缀作为网络号CIDR改善了IP地址的分配方式&#xff0c;缓解了IP地址危机CIDR…

刷脸背后,卷积神经网络的数学原理原来是这样的

来源&#xff1a;深度学习这件小事计算机视觉技术在日常生活中有着非常普遍的应用&#xff1a;发朋友圈之前自动修图、网上购物时刷脸支付……在这一系列成功的应用背后&#xff0c;卷积神经网络功不可没。本文将介绍卷积神经网络背后的数学原理。在自动驾驶、医疗以及零售这些…

OpenGL之坐标系以及单位

1.1 OpenGL中默认的坐标系为右手坐标系&#xff0c;默认视点位置为原点&#xff0c;原点正好投影在投影窗口的中心&#xff0c;也正好投影在视口的中心。 1.2 在OpenGL中无绝对单位&#xff0c;只有相对的大小&#xff0c;相对于视锥体的大小来设定物体的大小。 1.3 通过估算…