用$ Min-Max$容斥之后要推的东西少了好多

无耻的用实数快读抢了BZOJLuoguLOJ三个$ OJ$的Rank 1

即将update:被STO TXC OTZ超了QAQ

题意:集合$ [0,2^n)$中每次以一定给出概率产生一个数,求产生数按位或值为$ 2^n-1$的数字数量期望


$ Solution:$

根据$ Min-Max$容斥,令$ Max(S)$表示所有位中最后一次出现的时间,$Min(S)$表示第一次出现的时间

显然有$ ans=Max(S)$

根据$ Min-Max$容斥有

$ Max(S)=\sum\limits(-1)^{|T|+1}Min(T)$

现在的问题是如何快速求出$ Min(S)$

由于$ Min(S)$的意义是集合$ S$中第一次出现的位置的出现时间的期望

有每次随机到集合$ S$中某一位的概率为:

$ \sum\limits_{T \cap S \neq \emptyset}P_T$

其中$ P_T$是产生$ T$这个数的概率

因此可以得知

$ Min(S)=\frac{1}{\sum\limits_{T \cap S \neq \emptyset}P_T}$

其中和原集有交可以转化成不属于原集的补集

求原集的补集可以用$ FMT/FWT$优化,时间复杂度$ O(n·2^n)$


$ my \ code:$

#include<ctime>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<queue>
#define rt register int
#define ll long long
using namespace std;
inline ll read(){
ll x = ; char zf = ; char ch = getchar();
while (ch != '-' && !isdigit(ch)) ch = getchar();
if (ch == '-') zf = -, ch = getchar();
while (isdigit(ch)) x = x * + ch - '', ch = getchar(); return x * zf;
}
void write(ll y){if(y<)putchar('-'),y=-y;if(y>)write(y/);putchar(y%+);}
void writeln(const ll y){write(y);putchar('\n');}
int i,j,k,m,n,x,y,z,cnt,tot;
double a[];
namespace fast_IO{
const int IN_LEN=,OUT_LEN=;
char ibuf[IN_LEN],obuf[OUT_LEN],*ih=ibuf+IN_LEN,*oh=obuf,*lastin=ibuf+IN_LEN,*lastout=obuf+OUT_LEN-;
inline char getchar_(){return (ih==lastin)&&(lastin=(ih=ibuf)+fread(ibuf,,IN_LEN,stdin),ih==lastin)?EOF:*ih++;}
inline void putchar_(const char x){if(oh==lastout)fwrite(obuf,,oh-obuf,stdout),oh=obuf;*oh++=x;}
inline void flush(){fwrite(obuf,,oh-obuf,stdout);}
}
using namespace fast_IO;
#define getchar() getchar_()
double readf(){
char ch=getchar();
while(!isdigit(ch))ch=getchar();
double value=ch-'';
ch=getchar();
while(isdigit(ch)){
value=value*+ch-'';
ch=getchar();
}
if(ch=='.'){
double cur=0.1;
ch=getchar();
while(isdigit(ch)){
value+=cur*(ch-'');
cur*=0.1;
ch=getchar();
}
}
return value;
}
int main(){
tot=read();n=<<tot;
for(rt i=;i<n;i++)a[i]=readf();
for(rt i=;i<tot;i++)
for(rt j=;j<n;j++)if(j>>i&)a[j]+=a[j^(<<i)];
double ans=;
for(rt i=;i<tot;i++)if(a[n-^(<<i)]==)return puts("INF"),;
for(rt i=;i<n;i++)if(a[i]<-0.0000001){
if(__builtin_popcount(i)+tot&)
ans+=1.0/(1.0-a[i]);else ans-=1.0/(1.0-a[i]);
}
printf("%.10f",ans);
return ;
}

LOJ#2127「HAOI2015」按位或的更多相关文章

  1. 【LOJ】#2127. 「HAOI2015」按位或

    题解 听说这是一道论文题orz \(\sum_{k = 1}^{\infty} k(p^{k} - p^{k - 1})\) 答案是这个多项式的第\(2^N - 1\)项的系数 我们反演一下,卷积变点 ...

  2. loj#2128. 「HAOI2015」数字串拆分 矩阵乘法

    目录 题目链接 题解 代码 题目链接 loj#2128. 「HAOI2015」数字串拆分 题解 \(f(s)\)对于\(f(i) = \sum_{j = i - m}^{i - 1}f(j)\) 这个 ...

  3. 「HAOI2015」按位或

    「HAOI2015」按位或 解题思路 : 这类期望题一眼 \(\text{Min-Max}\) 容斥,只需要稍微推一下如何求 \(E(minS)\) 即可. \[ E(minS) = \frac{1} ...

  4. 【LOJ2127】「HAOI2015」按位或

    题意 刚开始你有一个数字 \(0\),每一秒钟你会随机选择一个 \([0,2^n-1]\) 的数字,与你手上的数字进行或操作.选择数字 \(i\) 的概率是 \(p[i]\) . 问期望多少秒后,你手 ...

  5. Loj #2192. 「SHOI2014」概率充电器

    Loj #2192. 「SHOI2014」概率充电器 题目描述 著名的电子产品品牌 SHOI 刚刚发布了引领世界潮流的下一代电子产品--概率充电器: 「采用全新纳米级加工技术,实现元件与导线能否通电完 ...

  6. Loj #3096. 「SNOI2019」数论

    Loj #3096. 「SNOI2019」数论 题目描述 给出正整数 \(P, Q, T\),大小为 \(n\) 的整数集 \(A\) 和大小为 \(m\) 的整数集 \(B\),请你求出: \[ \ ...

  7. Loj #3093. 「BJOI2019」光线

    Loj #3093. 「BJOI2019」光线 题目描述 当一束光打到一层玻璃上时,有一定比例的光会穿过这层玻璃,一定比例的光会被反射回去,剩下的光被玻璃吸收. 设对于任意 \(x\),有 \(x\t ...

  8. Loj #3089. 「BJOI2019」奥术神杖

    Loj #3089. 「BJOI2019」奥术神杖 题目描述 Bezorath 大陆抵抗地灾军团入侵的战争进入了僵持的阶段,世世代代生活在 Bezorath 这片大陆的精灵们开始寻找远古时代诸神遗留的 ...

  9. Loj #2542. 「PKUWC2018」随机游走

    Loj #2542. 「PKUWC2018」随机游走 题目描述 给定一棵 \(n\) 个结点的树,你从点 \(x\) 出发,每次等概率随机选择一条与所在点相邻的边走过去. 有 \(Q\) 次询问,每次 ...

随机推荐

  1. matplotlib 将两张数据视图在一起显示

    import numpy as np import pandas as pd from matplotlib import pyplot as plt if __name__ == "__m ...

  2. 中性SNP的突变年龄评估(estimate the average age of a neutral two-allele polymorphism)

    假设中性突变的频率分别为P和1-P,则其突变年龄为:-4Ne[p*( logep)+(1-p)* loge (1-p)] The average age of a neutral two-allele ...

  3. JDBC调用MySQL的调用过程CallableStatement

    调用过程可以当作函数理解,具体参考本人博文https://www.cnblogs.com/xixixing/p/9720261.html MySQL的test数据库中已经创建好存储过程p2(n),实现 ...

  4. 我眼中的正则化(Regularization)

    警告:本文为小白入门学习笔记 在机器学习的过程中我们常常会遇到过拟合和欠拟合的现象,就如西瓜书中一个例子: 如果训练样本是带有锯齿的树叶,过拟合会认为树叶一定要带有锯齿,否则就不是树叶.而欠拟合则认为 ...

  5. CentOS7用阿里云Docker Yum源在线安装Docker 17.03.2

        参考文档 安装步骤 删除已安装的Docker 配置阿里云Docker Yum源 安装指定版本 启动Docker服务 参考文档 官方Docker安装文档:https://docs.docker. ...

  6. 微服务框架之微软Service Fabric

    常见的微服务架构用到的软件&组件: docker(成熟应用) spring boot % spring cloud(技术趋势) Service Fabric(属于后起之秀 背后是微软云的驱动) ...

  7. 关于indexOf,charAt,subString的区别

    @Test public void indexOf() { // 注意:在Unicode表中A-Z的十进制对应:65-90 // a-z的进制对应:97-122 // 0-9的十进制对应:48-57 ...

  8. bzoj2243 树链剖分

    https://www.lydsy.com/JudgeOnline/problem.php?id=2243 新学的树剖,在维护的时候线段树维护区间内颜色数量以及左右两端的颜色.统计的时候区间合并时判断 ...

  9. Java封装、继承整理

    封装 3.1封装概念: 提高代码复用性 隐藏实现细节,对外访问提供公共接口 提高安全型 3.2封装举例 机箱就是隐藏实现细节,提供了公共的访问接口 3.3私有private 一般对成员属性的访问动作: ...

  10. ubuntu14.04安装tun/tap网络设备

    14.04的系统默认是没有tun设备的,所以需要通过在内核中编译时勾选此设备.接下来分步来介绍如何安装tun设备. 一.更新ubuntu桌面版源: sudo gedit /etc/apt/source ...