AcWing 216 Rainbow 的信号
题意
给定一个长度为n的序列,然后从\(1\sim N\) 这 N 个数中选取两个数\(l,r\) , 如果\(l>r\),则交换\(l,r\)。把第\(l\) 个数到第\(r\)个数取出来构成一个数列。
A为该数列的xor和的期望
B为该数列的and和的期望
C为该数列的or和的期望
\(1\le N\le 1e5, N个自然数均不超过1e9\)
分析
- 位运算是不进位的,各位之间互不影响,因此可以把N个自然数都分成31位来单独计算
- 那些\([l,r]\) 宽度为1的,单个选取的概率其实为\(1\over {N^2}\),而其他为\(2\over {N^2}\) 。所以可以先处理那些宽度为1的区间
ABC的具体求法:
- xor是最不好想的那个,但是看书还是比较好理解的,利用两个变量\(c_1,c_2\) 来记录从\(r-1\)倒着往前数,奇数段和偶数段的长度和(因为异或遇到1就会反转答案,所以每一段是若干个0加一个1)
- and与or是比较好求的,last0和last1分别记录最接近的0和1的位置
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
typedef long long ll;
int a[N];
int n;
ll nn;
double B,C,A;
void calc(int x){
int last1 = 0,last0 = 0;
int c1 = 0,c2 = 0;
double solo = 0;//区间宽度为1的
for(int i=1;i<=n;i++){
int k = a[i] >> x & 1;//k表示当前这一位是0还是1
if(k){
B += 2.0 * (i - last0 - 1) * (1 << x) / nn ;
C += 2.0 * (i - 1) * (1 << x) / nn;
A += 2.0 * c1 * (1 << x) / nn;
c1++;
swap(c1,c2);
solo += (1 << x) * 1.0 / nn;
last1 = i;
}
else{
C += 2.0 * last1 * (1 << x) / nn;
c1++;
A += 2.0 * c2 * (1 << x) / nn;
last0 = i;
}
}
B += solo;
C += solo;
A += solo;
}
int main(){
scanf("%d",&n); nn = (ll) n * n;
for(int i=1;i<=n;i++)scanf("%d",&a[i]);
for(int i=0;i<31;i++){
calc(i);
}
printf("%.3f %.3f %.3f\n",A,B,C);
return 0;
}
AcWing 216 Rainbow 的信号的更多相关文章
- Rainbow的信号
Rainbow的信号 有一串长度为n的数列,现在从中等概率选出l,r,如果l大于r,则交换,有三个询问 l~r间的数与和的数学期望 l~r间的数或和的数学期望 l~r间的数异或和的数学期望 对于100 ...
- tyvj 2020 rainbow 的信号
期望 被精度坑惨的我 注意:能开 long long 尽量开, 先除后乘, int 转 double 的时候 先转换在做运算 本题与位运算有关,位与位之间互不影响,所以我们可以分开考虑 #includ ...
- joyoi2020/lfyzoj114 Rainbow 的信号
位与位间互不影响.一位一位计算. 长度为 \(1\) 的区间,选出概率为 \(1/n^2\).其余区间,选出概率为 \(2/n^2\).(这里的区间 \(l \leq r\)) 枚举右端点.记 \(l ...
- [BZOJ3054] Rainbow的信号(考虑位运算 + DP?)
传送门 BZOJ没数据范围... 其实数据范围是这样的.. 前20%可以直接n^3暴力枚举每个区间 前40%可以考虑每一位,因为所有数每一位都是独立的,而和的期望=期望的和,那么可以枚举每一位,再枚举 ...
- Rainbow的信号 CH3801
题目链接 题意:求n个整数任意取一个区间,一起进行xor,and,或or的操作,求xor的期望值,and的期望值,or的期望值. 思路:区间取的左端点为l,右端点为r,当r==l时,选的概率为1/n/ ...
- $CH$3801 $Rainbow$的信号 期望+位运算
正解:位运算 解题报告: 传送门! 其实就是个位运算,,,只是顺便加了个期望的知识点$so$期望的帕并不难来着$QwQ$ 先把期望的皮扒了,就直接分类讨论下,不难发现,答案分为两个部分 $\left\ ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- Cadence 信号完整性(一)-- 仿真步骤3
(2)单击“Identify DC Nets”,弹出“Identify DC Nets”窗口,如图2-6 所示: 图 2-6 Identify DC Nets 窗口 (3)在“Net”列表中选择网络如 ...
- CH3801Rainbow的信号
Description Freda发明了传呼机之后,rainbow进一步改进了传呼机发送信息所使用的信号.由于现在是数字.信息时代,rainbow发明的信号用N个自然数表示.为了避免两个人的对话被大坏 ...
随机推荐
- IdentityServer4 之 Resource Owner Password Credentials 其实有点尴尬
前言 接着IdentityServer4的授权模式继续聊,这篇来说说 Resource Owner Password Credentials授权模式,这种模式在实际应用场景中使用的并不多,只怪其太开放 ...
- js--实现限制input输入框数字输入,实现每四位一个空格效果(银行卡号,手机号等)
前言 工作学习中经常能遇到输入框限制输入数字,并且每四位一空格的情况,比如表单中银行卡号,手机号等输入框的限制,这里介绍一下使用js具体的实现方法.不需要引用第三方ui库. 正文 1.input标签的 ...
- 利用dotnet-dump分析docker容器内存泄露
目录 一 运行官方示例 1,Clone代码并编译 2,创建Dockerfile构建镜像 3,启动容器 二 生成dump转储文件 1,制造问题 2,创建dump文件 三 分析dump文件 1,创建一个用 ...
- ICMP协议概述
• ICMP是三层协议,和IP.ARP.ICMP同属三层 • IP协议中的6是代表上层的TCP协议,17代表UDP协议,1代表同层的ICMP协议 • ICMP协议主要用来探测 ...
- 【JavaWeb】JSTL 标签库
JSTL 标签库 简介 JSTL(JSP Standard Tag Library),即 JSP 标准标签库.标签库是为了替换代码脚本,使得整个 jsp 页面变得更加简洁. JSTL 有五个功能不同的 ...
- Openstack OCATA 安装环境说明(一) 未完成版本
1 Openstack简介: 2 实验说明: 3 图例: 4 实验环境说明: 4.1 ) 网卡说明: 网卡名 网 段 连接方式 说明 eth0 10.10.5.0/24 仅主机网络 内部网络自动以IP ...
- 为啥使用innodb_flush_method=o_direct 就能减轻io压力呢
为啥使用innodb_flush_method=o_direct 就能减轻io压力呢
- 【Linux】history用法
通过history命令可以查看我们在系统中输入过的命令 history命令的一些常用参数 -c 清空内存中命令历史 -d # 删除指定的历史命令,比如 history -d 100 ,就是删除第1 ...
- 【ORA】ora-39700解决
- kubernets与API服务器进行交互
一 为何需要与kubernets集群的API服务器进行交互 1.1 kubernets提供了一种downapi的资源可以将pod的元数据渲染成环境变量或者downward卷的形式挂载到容器的文件系 ...