正题

题目链接:https://www.luogu.com.cn/problem/P3175


题目大意

开始有一个\(n\)位二进制数\(s=0\),每次有\(p_i\)概率选取数字\(i\)让\(s\)或上这个数字\(i\),求期望多少次能够让\(s\)的\(n\)个位都变为\(1\)。


解题思路

因为是或所以我们只关心最后一个选中的数,设第\(i\)位选中的期望次数为\(E(i)\)的话答案就是\(max\{E(i)\}\)。

又是期望又是\(max\)所以可以直接上\(\text{min-max}\)容斥,答案就是

\[\sum_{T\in S}min\{E(i)\}(i\in T)*(-1)^{|T|+1}
\]

算这个东西的话也就是如果我们选中一个与\(T\)有交集的数就可以退出了。期望次数=1/期望概率。所以我们直接算期望概率

也就是我们要算所有\(\sum_{G\cap T\neq \varnothing}p_{G}\)。\(G\)和\(T\)的交集非空就去掉所有交集为空的,交集为空的就是\(T\)的补集的子集和。

子集和的话就是直接拿\(p\)出来跑一次\(or\)的\(\text{FWT}\)的结果就是子集和了。

时间复杂度\(O(n2^n)\)


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
const int N=1<<21;
const double eps=1e-8;
int n;double cnt[N],p[N],ans;
void FWT_or(double *f,int op){
for(int p=2;p<=n;p<<=1)
for(int k=0,len=p>>1;k<n;k+=p)
for(int i=k;i<k+len;i++)
f[i+len]+=f[i]*op;
return;
}
int main()
{
scanf("%d",&n);
cnt[0]=-1;n=1<<n;
for(int i=0;i<n;i++)
scanf("%lf",&p[i]);
FWT_or(p,1);
for(int i=0;i<n;i++){
if(i)cnt[i]=-cnt[i-(i&-i)];
double e=1-p[(n-1)^i];
if(fabs(e)<eps)continue;
ans+=cnt[i]*(1.0/e);
}
if(ans<eps)printf("INF");
else printf("%.10lf",ans);
}

P3175-[HAOI2015]按位或【min-max容斥,FWT】的更多相关文章

  1. bzoj 4036: [HAOI2015]按位或【min-max容斥+FWT】

    其实也不是FWT--我也不知道刷FWT专题问什么会刷出来这个东西 这是min-max容斥讲解:https://www.zybuluo.com/ysner/note/1248287 总之就是设min(s ...

  2. [HAOI2015]按位或(min-max容斥,FWT,FMT)

    题目链接:洛谷 题目大意:给定正整数 $n$.一开始有一个数字 $0$,然后每一秒,都有 $p_i$ 的概率获得 $i$ 这个数 $(0\le i< 2^n)$.一秒恰好会获得一个数.每获得一个 ...

  3. BZOJ4036 [HAOI2015]按位或 【minmax容斥 + 期望 + FWT】

    题目链接 BZOJ4036 题解 好套路的题啊,,, 我们要求的,实际上是一个集合\(n\)个\(1\)中最晚出现的\(1\)的期望时间 显然\(minmax\)容斥 \[E(max\{S\}) = ...

  4. bzoj4036 / P3175 [HAOI2015]按位或

    bzoj4036 / P3175 [HAOI2015]按位或 是一个 min-max容斥 的板子题. min-max容斥 式子: $ \displaystyle max(S) = \sum_{T\su ...

  5. 【BZOJ4036】按位或(Min-Max容斥,FWT)

    [BZOJ4036]按位或(Min-Max容斥,FWT) 题面 BZOJ 洛谷 题解 很明显直接套用\(min-max\)容斥. 设\(E(max\{S\})\)表示\(S\)中最晚出现元素出现时间的 ...

  6. 「PKUWC2018」随机游走(min-max容斥+FWT)

    「PKUWC2018」随机游走(min-max容斥+FWT) 以后题目都换成这种「」形式啦,我觉得好看. 做过重返现世的应该看到就想到 \(min-max\) 容斥了吧. 没错,我是先学扩展形式再学特 ...

  7. luogu P3175 [HAOI2015]按位或

    传送门 如果每个位置上的数字的意义是这个位置被加进集合的最早时间,那么我们要求的就是集合中最大数的期望,使用Min-Max容斥,\(E(max(S))=\sum_{T\subset S}(-1)^{| ...

  8. [洛谷P3175][HAOI2015]按位或

    题目大意:刚开始有一个数$x=0$,每秒钟有一个数$y\in[0,2^n)(n\leqslant20)$按一定概率随机出现,数$i$的概率为$p_i$,保证$\sum\limits_{i=0}^{2^ ...

  9. 洛谷 P3175 [HAOI2015]按位或

    题目分析 与hdu4336 Card Collector相似,使用min-max容斥. 设\(\max(S)\)表示集合\(S\)中最后一位出现的期望时间. 设\(\min(S)\)表示集合\(S\) ...

随机推荐

  1. Centos7 出现Welcome to emergency mode!【紧急模式】

    Centos7 出现Welcome to emergency mode![紧急模式] 做mount挂载时,修改了  /etc/fstab 文件,导致Centos7重启时出现如下图所示错误:   输入r ...

  2. TaskAwaiter<TResult> 结构

    参考网址:https://docs.microsoft.com/zh-cn/dotnet/api/system.runtime.compilerservices.taskawaiter-1?view= ...

  3. IIS 站点一键导入 导出

    C:\Windows\System32\inetsrv\appcmd list site /config /xml > c:\sites.xml C:\Windows\System32\inet ...

  4. PostgreSQL执行计划的解析

    一个顺序磁盘页面操作的cost值由系统参数seq_page_cost (floating point)参数指定的,由于这个参数默认为1.0,所以我们可以认为一次顺序磁盘页面操作的cost值为1.下面o ...

  5. ASP.Net Core Web Api 使用 IdentityServer4 最新版 踩坑记录

    辅助工具 日志追踪包 : Serilog.AspNetCore 源码查看工具 : ILSpy 项目环境 ###: ASP.NetCore 3.1 IdentityServer4 4.0.0+ 主题内容 ...

  6. [SWMM]软件启动不了,出现 “ RPC服务器不可用 ” 错误

    [问题]打开SWMM5.1软件时,初选"RPC服务器不可用"的错误 [解决]计算机管理--服务 设置Print Spooler服务状态为启动,并设置为自启动.

  7. Java HdAcm1069

    import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class Main { Lis ...

  8. RabbitMQ-初见

    目录 什么是中间件 消息队列协议 AMQP协议 MQTT协议 OpenMessage协议 Kafka协议 消息队列持久化 消息的分发策略 消息队列高可用和高可靠 什么是高可用机制 集群模式1 - Ma ...

  9. viper配置管理

    安装 go get github.com/spf13/viper viper支持的功能 1.可以设置默认值 2.可以加载多种格式的配置文件,如JSON,TOML,YAML,HCL和Java属性配置文件 ...

  10. Intel® QAT加速卡之逻辑实例

    Intel QAT加速卡逻辑实例 1. QAT相关的名词组织关系 在本手册中描述的平台上,处理器可以连接到一个或多个英特尔通信芯片组8925至8955系列(PCH)设备. 从软件角度来看,每个PCH设 ...