[HAOI2015]按位或
好神的题啊
我们发现我们求这个东西如果常规\(dp\)的话可以建出一张拓扑图来,但是边的级别高达\(3^n\),转移的时候还要解方程显然不能通过本题
我们考虑神仙的\(min-max\)容斥
设\(Emax(S)\)表示集合\(S\)中最晚出现的那个自己出现的期望时间,\(Emin(S)\)表示集合\(S\)最早出现的那个子集出现的期望时间
我们套上公式
\]
我们考虑\(Emin(T)\)怎么求,显然只需要一个跟\(T\)有交的子集就可以了
于是
\]
发现有交好像不是很好求,我们正难则反一下
求\(1-\sum_{j\cap T= \varnothing }p_j\),考虑到和\(T\)没有交的集合必然是\(T\)的补集的子集,于是我们求一个子集和就好了
回忆\(fwt\)的\(or\)卷积的第一步,我们求出来是\(\sum_{j|i=i}p_j\),就是子集和
于是我们套一个\(fwt\)即可
代码
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#define re register
#define LL long long
#define eps 1e-10
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
const int maxn=(1<<20)+12;
int n,len,cnt[maxn];
double p[maxn];
inline void Fwtor(double *f) {
for(re int i=2;i<=len;i<<=1)
for(re int ln=i>>1,l=0;l<len;l+=i)
for(re int x=l;x<l+ln;++x)
f[x+ln]+=f[x];
}
inline int check(double a) {return a+eps>0&&a-eps<0;}
int main() {
scanf("%d",&n);len=(1<<n);
for(re int i=0;i<len;i++) scanf("%lf",&p[i]);
Fwtor(p);double ans=0;
for(re int i=1;i<len;i++) {
cnt[i]=cnt[i>>1]+(i&1);
if(check(1.0-p[(len-1)^i])) {
puts("INF");return 0;
}
if(cnt[i]&1) ans+=1.0/(1.0-p[(len-1)^i]);
else ans-=1.0/(1.0-p[(len-1)^i]);
}
printf("%.10lf\n",ans);
return 0;
}
[HAOI2015]按位或的更多相关文章
- 【BZOJ4036】[HAOI2015]按位或 FWT
[BZOJ4036][HAOI2015]按位或 Description 刚开始你有一个数字0,每一秒钟你会随机选择一个[0,2^n-1]的数字,与你手上的数字进行或(c++,c的|,pascal的or ...
- [BZOJ 4036][HAOI2015]按位或
4036: [HAOI2015]按位或 Time Limit: 10 Sec Memory Limit: 256 MBSec Special JudgeSubmit: 746 Solved: 4 ...
- [luogu 3175] [HAOI2015]按位或(min-max容斥+高维前缀和)
[luogu 3175] [HAOI2015]按位或 题面 刚开始你有一个数字0,每一秒钟你会随机选择一个[0,2^n-1]的数字,与你手上的数字进行按位或运算.问期望多少秒后,你手上的数字变成2^n ...
- bzoj4036 / P3175 [HAOI2015]按位或
bzoj4036 / P3175 [HAOI2015]按位或 是一个 min-max容斥 的板子题. min-max容斥 式子: $ \displaystyle max(S) = \sum_{T\su ...
- BZOJ4036 [HAOI2015]按位或 FWT
原文链接https://www.cnblogs.com/zhouzhendong/p/BZOJ4036.html 题目传送门 - BZOJ4036 题意 刚开始你有一个数字 $0$ ,每一秒钟你会随机 ...
- [HAOI2015]按位或(min-max容斥,FWT,FMT)
题目链接:洛谷 题目大意:给定正整数 $n$.一开始有一个数字 $0$,然后每一秒,都有 $p_i$ 的概率获得 $i$ 这个数 $(0\le i< 2^n)$.一秒恰好会获得一个数.每获得一个 ...
- BZOJ 4036: [HAOI2015]按位或 集合幂函数 莫比乌斯变换 莫比乌斯反演
http://www.lydsy.com/JudgeOnline/problem.php?id=4036 http://blog.csdn.net/lych_cys/article/details/5 ...
- HDU4624 Endless Spin 和 HAOI2015 按位或
Endless Spin 给你一段长度为[1..n]的白色区间,每次随机的取一个子区间将这个区间涂黑,问整个区间被涂黑时需要的期望次数. n<=50 题解 显然是min-max容斥,但是n的范围 ...
- [HAOI2015]按位或(容斥+前缀和)
题目描述 刚开始你有一个数字0,每一秒钟你会随机选择一个[0,2^n-1]的数字,与你手上的数字进行或(c++,c的|,pascal 的or)操作.选择数字i的概率是p[i].保证0<=p[i] ...
- luogu P3175 [HAOI2015]按位或
传送门 如果每个位置上的数字的意义是这个位置被加进集合的最早时间,那么我们要求的就是集合中最大数的期望,使用Min-Max容斥,\(E(max(S))=\sum_{T\subset S}(-1)^{| ...
随机推荐
- C#异步,多线程下的HttpContext丢失问题
1.思路概述 首先让我把大概的一个思路先说一遍吧. 我在一个页面中要同时调用两个接口,而我要给这些接口一些参数:就是我通过HttpContext.Current.Request.QueryString ...
- JAVA成员方法的调用分析
如下面例子: public class A { int x=10; public int getx() {return x;} } public class B extends A { int x=2 ...
- IntelliJ IDEA创建spring-boot项目
开发环境: jdk版本:JDK8 maven版本:maven-3.5.2 开发工具:Itellij IDEA 2017.1 前提条件:已安装以上软件并配置好jdk和maven的环境变量 创建步骤: 点 ...
- 后台管理UI+功能
kingRoad功能强大,丰富各种功能和插件,自定义开发功能组件及样式,使用webpack方式集成和纯html两种,UI(自定义开发和AdminLTE的集成优化),弹窗功能使用(Layer弹窗,并与框 ...
- HDU1560(KB2-E IDA星)
DNA sequence Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tot ...
- display:table-cell自适应布局下连续单词字符换行——张鑫旭
之前有几次提到了使用display:table-cell实现强大的任意尺寸元素的自适应布局(都藏在长长文章之中).这里开篇再次提一下,希望能将该技术普及下去. 典型的双栏布局类名使用如下: fix l ...
- 分享到xxx
来源百度 一.概述 百度分享代码已升级到2.0,本页将介绍新版百度分享的安装配置方法,请点击左侧列表查看相关章节. 二.代码结构 分享代码可以分为三个部分:HTML.设置和js加载,示例如下: 代码结 ...
- 【node】用koa搭建一个增删改服务(一)
前文,vue分类里有一个日志demo的练习,这篇文章就是介绍针对日志demo的服务是怎么写的 一.koa搭建项目 1. npm init 2. npm install koa 二.建数据库 下面是项目 ...
- 查看组成一个Index的column有哪些
下面是创建一个表,并在上面建立一些index的SQL.我们会新建一个用户,然后再那个schema下运行下面的SQL. create table indtest (f1_num number(10) ...
- 删除maven本地库中下载不完全的jar包
@echo off rem 这里写你的仓库路径 set REPOSITORY_PATH= '本地仓库路径' rem 正在搜索... for /f "delims=" %%i in ...