原文链接https://www.cnblogs.com/zhouzhendong/p/BZOJ4036.html

题目传送门 - BZOJ4036

题意

  刚开始你有一个数字 $0$ ,每一秒钟你会随机选择一个 $[0,2^n-1]$ 的数字,与你手上的数字进行 $OR$ (按位或) 操作。

  选择数字 $i$ 的概率是 $p_i$ 。保证 $0\leq p_i\leq 1$ ,$\sum_{i=0}^{2^n-1}p_i=1$ 。

  问期望多少秒后,你手上的数字变成 $2^n-1$ 。

  $n\leq 20$

题解

  先 FWT 一下 。

  我们称状态 $x$ 为当前停留在 $x$ 的子集中。

  对于状态 $x$ ,每一次停留在 $x$ 的概率为 $p_x$ 。

  所以每一步走出 $x$ 的概率就是 $1-p_x$ 。

  所以走出 $x$ 的期望步数为 $\cfrac{1}{1-p_x}$ 次。

  显然走出 $2^n-1$ 的期望步数为 $\infty$ 。

  但是走入 $2^n-1$ 的期望步数为走出所有其他状态的期望步数。

  所以 UFWT 的结果是负的“走入 $2^n-1$ 的期望步数" 。

  于是判一判就可以了。

代码

#include <bits/stdc++.h>
using namespace std;
const int N=1<<20;
int n;
double a[N];
void FWT(double a[],int flag){
for (int d=1;d<n;d<<=1)
for (int i=0;i<n;i+=(d<<1))
for (int j=0;j<d;j++)
a[i+j+d]+=a[i+j]*flag;
}
int main(){
scanf("%d",&n),n=1<<n;
for (int i=0;i<n;i++)
scanf("%lf",&a[i]);
FWT(a,1);
for (int i=0;i<n-1;i++)
a[i]=1.0/(1.0-a[i]);
a[n-1]=0;
FWT(a,-1);
a[n-1]=-a[n-1];
if (a[n-1]<1e100)
printf("%.8lf",a[n-1]);
else
puts("INF");
return 0;
}

  

  

BZOJ4036 [HAOI2015]按位或 FWT的更多相关文章

  1. 【BZOJ4036】[HAOI2015]按位或 FWT

    [BZOJ4036][HAOI2015]按位或 Description 刚开始你有一个数字0,每一秒钟你会随机选择一个[0,2^n-1]的数字,与你手上的数字进行或(c++,c的|,pascal的or ...

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

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

  3. BZOJ4036 HAOI2015按位或(概率期望+容斥原理)

    考虑min-max容斥,改为求位集合内第一次有位变成1的期望时间.求出一次操作选择了S中的任意1的概率P[S],期望时间即为1/P[S]. 考虑怎么求P[S].P[S]=∑p[s] (s&S& ...

  4. [BZOJ4036] [HAOI2015]按位或

    传送门:https://lydsy.com/JudgeOnline/problem.php?id=4036 Description 刚开始你有一个数字0,每一秒钟你会随机选择一个[0,2^n-1]的数 ...

  5. bzoj4036 [HAOI2015]按位或 状压DP + MinMax 容斥

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4036 题解 变成 \(2^n-1\) 的意思显然就是每一个数位都出现了. 那么通过 MinMa ...

  6. bzoj4036 / P3175 [HAOI2015]按位或

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

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

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

  8. [BZOJ 4036][HAOI2015]按位或

    4036: [HAOI2015]按位或 Time Limit: 10 Sec  Memory Limit: 256 MBSec  Special JudgeSubmit: 746  Solved: 4 ...

  9. [luogu 3175] [HAOI2015]按位或(min-max容斥+高维前缀和)

    [luogu 3175] [HAOI2015]按位或 题面 刚开始你有一个数字0,每一秒钟你会随机选择一个[0,2^n-1]的数字,与你手上的数字进行按位或运算.问期望多少秒后,你手上的数字变成2^n ...

随机推荐

  1. kali sudo apt install 无法定位软件包

    在etc/apt   的sources.list 添加镜像源 debhttp://http.kali.org/kali kali-rolling main non-free contrib 或 deb ...

  2. mysql:批量插入不同的UUID

    INSERT INTO t_base_role_resource_ref (refID, roleID, resID, orgID, belongTo) SELECT uuid() AS refID, ...

  3. ASP.NET MVC5高级编程 之 路由

    每个ASP.NET MVC应用程序都需要路由来定义自己处理请求的方式.路由是MVC应用程序的入口点.路由的核心工作是将一个请求映射到一个操作 路由主要有两种用途: 匹配传入的请求(该请求不匹配服务器文 ...

  4. Light OJ 1078

    题意: 给你 N,K 输出 KKKK.....KK能整除 N, 输出 K 的个数, (最小) 基础数学, 取摸运算即可. #include<bits/stdc++.h> using nam ...

  5. zookeeper的三种安装模式

    zookeeper的安装分为三种模式:单机模式.集群模式和伪集群模式. 1.单机模式 首先,从Apache官网下载一个Zookeeper稳定版本,本次教程采用的是zookeeper-3.4.9版本. ...

  6. [转]PHP开发中涉及到emoji表情的三种处理方法

    最近几个月做微信开发比较多,存储微信昵称必不可少,可这万恶的微信支持emoji表情做昵称,这就有点蛋疼了 一般Mysql表设计时,都是用UTF8字符集的.把带有emoji的昵称字段往里面insert一 ...

  7. 帮你彻底搞懂JS中的prototype、__proto__与constructor(图解)

    作为一名前端工程师,必须搞懂JS中的prototype.__proto__与constructor属性,相信很多初学者对这些属性存在许多困惑,容易把它们混淆,本文旨在帮助大家理清它们之间的关系并彻底搞 ...

  8. 使用XIB 或者storyboard 创建imageView 模式 UIViewContentModeScaleAspectFill  图片越界问题

    ImageView UIViewContentModeScaleAspectFill 超出边界的问题 代码如下 [_photoView setClipsToBounds:Yes];       sto ...

  9. ios集成极光推送:Undefined symbols for architecture arm64: "_dns_parse_resource_record", referenced from:?

    添加libresolv.tbd库,即可解决问题 Undefined symbols for architecture arm64: "_dns_parse_resource_record&q ...

  10. gnuradio 初次使用

    参考链接: 入门 http://www.cnblogs.com/moon1992/p/5739027.html 创建模块 http://www.cnblogs.com/moon1992/p/54246 ...