题目


分析

按位去看,最终的答案要求 \(E(\max S)\) 就是 \(S\) 出现的期望时间。

根据min-max容斥,\(E(\max S)=\sum_{T\subset S}(-1)^{|T|-1}E(\min T)\)

那么 \(E(\min T)\) 也就是 \(T'\subset T\) 出现的期望时间,与不在 \(T\) 中的 1 不能出现的概率有关

\[E(\min T)=\frac{1}{1-P'(\lnot T)}=\frac{1}{1-\sum_{S' \subset\lnot T}P(S')}
\]

下面这个求和可以用子集卷积实现,FWT 的或卷积就可以做到 \(O(2^nn)\)


代码

#include <cstdio>
#define rr register
using namespace std;
const int N=1050011;
int n,al,xo[N]; double f[N],ans;
inline void FWT_OR(double *f){
for (rr int p=2;p<=n;p<<=1){
rr int len=p>>1;
for (rr int i=0;i<n;i+=p)
for (rr int j=i;j<i+len;++j)
f[j+len]+=f[j];
}
}
signed main(){
scanf("%d",&n),n=1<<n,al=n-1;
for (rr int i=0;i<n;++i) scanf("%lf",&f[i]);
for (rr int i=1;i<n;++i) xo[i]=xo[i&(i-1)]+1;
FWT_OR(f);
for (rr int i=1;i<n;++i)
if (1-f[al^i]>1e-8)
ans+=(xo[i]&1?1:-1)/(1-f[al^i]);
if (ans<1e-8) printf("INF");
else printf("%.8lf",ans);
return 0;
}

#min-max容斥,FWT#洛谷 3175 [HAOI2015]按位或的更多相关文章

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

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

  2. 洛谷 P3175 [HAOI2015]按位或

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

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

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

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

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

  5. 洛谷 P3177 [HAOI2015]树上染色 树形DP

    洛谷 P3177 [HAOI2015]树上染色 树形DP 题目描述 有一棵点数为 \(n\) 的树,树边有边权.给你一个在 \(0 \sim n\)之内的正整数 \(k\) ,你要在这棵树中选择 \( ...

  6. 【洛谷U20626】gemo 容斥 FWT 高斯消元

    题目大意 给你一个无向图,有\(m\)个询问,每次给你一个点\(x\)和一个点集\(S\),问你从\(x\)开始走,每次从一个点随机的走到与这个点相邻的点,问你访问\(S\)中每个点至少一次的期望步数 ...

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

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

  8. P3175-[HAOI2015]按位或【min-max容斥,FWT】

    正题 题目链接:https://www.luogu.com.cn/problem/P3175 题目大意 开始有一个\(n\)位二进制数\(s=0\),每次有\(p_i\)概率选取数字\(i\)让\(s ...

  9. BZOJ4033或洛谷3177 [HAOI2015]树上染色

    BZOJ原题链接 洛谷原题链接 很明显的树形\(DP\). 因为记录每个点的贡献很难,所以我们可以统计每条边的贡献. 对于每一条边,设边一侧的黑点有\(B_x\)个,白点有\(W_x\),另一侧黑点有 ...

  10. 洛谷 P5643 - [PKUWC2018]随机游走(Min-Max 容斥+FWT+树上高斯消元,hot tea)

    题面传送门 一道挺综合的 hot tea,放到 PKUWC 的 D2T2 还挺喜闻乐见的( 首先我们考虑怎样对一个固定的集合 \(S\) 计算答案,注意到我们要求的是一个形如 \(E(\max(S)) ...

随机推荐

  1. 使用RegSetValueEx创建键值

    #include <iostream> #include <string> #include <sstream> #include <fstream> ...

  2. [Android逆向] 重打包时报BrutException

    执行apktool b --use-aapt2 进行重打包时,重打包失败,抛出异常 apktool b /Users/***/work/appsApk/testApp --use-aapt2 I: U ...

  3. 【Android 逆向】r0zapataNative.apk 破解

    1. apk 安装到手机,需要输入内容,随便输入,提示fail... 2. apk 导入到jadx中查看一下 MainActivity.java String textData = "b2F ...

  4. pwd模块

    # pwd模块提供了获取UNIX平台用户的账户与密码信息(通过文件/etc/passwd),在所有的UNIX版本平台都可以用. # pwd模块返回的是一个类似元组的对象,该对象的各个属性对应于pass ...

  5. Java 包装类的使用 + 小练习

    1 package com.bytezreo.ut; 2 3 import org.junit.Test; 4 5 /** 6 * 7 * @Description 包装类的使用 8 * @autho ...

  6. Codeforces Round 927 (Div. 3)(A~F)

    目录 A B C D E F A 第一个遇到连续两个荆棘的地方就不能再赢金币了. 所以统计连续两个荆棘之前的所有金币 #include <bits/stdc++.h> #define in ...

  7. 建立两台linux主机的ssh信任,实现ssh免密登录远程服务器

    1.介绍 假设我们现在有AB两个服务器,要求A能够远程登录到B服务. CentOS版本:CentOS Linux release 7.6.1810 (Core) 2.实操 1.先在A服务上输入以下命令 ...

  8. C++学习笔记之基础语法

    目录 基础语法 switch和if区别 枚举定义及作用域 结构体数据耐齐--缺省对齐原则 函数重载overload与C++Name Mangling 指向函数的指针与返回指针的函数 基础语法 swit ...

  9. 全栈的自我修养: 002使用@vue/cli进行vue.js环境搭建 (使用Vue,Spring Boot,Flask,Django 完成Vue前后端分离开发)

    全栈的自我修养: 使用@vue/cli进行vue.js环境搭建 Success, real success, is being willing to do the things that other ...

  10. day03-功能实现03

    功能实现03 9.功能08-分页显示 9.1需求分析 将查询的数据进行分页显示,要求功能如下: 显示共多少条记录 可以设置每页显示几条 点击第几页,显示对应的数据 9.2思路分析 后端使用MyBati ...