BZOJ4036 [HAOI2015]按位或 【minmax容斥 + 期望 + FWT】
题目链接
题解
好套路的题啊,,,
我们要求的,实际上是一个集合\(n\)个\(1\)中最晚出现的\(1\)的期望时间
显然\(minmax\)容斥
\]
那么问题就转化为了求每个集合中最早出现的\(1\)的期望时间
假如在\(k\)时刻出现,那么前\(k - 1\)时刻一定都是取的补集的子集,记\(T\)补集的所有子集概率和为\(P\)
\]
是一个离散变量的几何分布
设\(P(x = a) = p\)
那么取到\(a\)的期望为
E(x = a) &= \sum\limits_{k = 1}^{\infty}k(1 - p)^{k - 1}p \\
&= p\sum\limits_{k = 1}^{\infty}k(1 - p)^{k - 1}
\end{aligned}
\]
记\(f(x) = 1 + 2x + 3x^2 + 4x^3 + \dots\)
则\(xf(x) = x + 2x^2 + 3x^3 + 4x^4 + \dots\)
则\((1 - x)f(x) = 1 + x + x^2 + x^3 + \dots\)
对于\(0 < x < 1\),\((1 - x)f(x)\)是收敛的,可以取到
\]
\]
所以
E(x = a) &= p\frac{1}{p^2} \\
&= \frac{1}{p}
\end{aligned}
\]
非常棒
于是有
\]
我们只需要求出所有集合的子集概率和就好了
其实就是或运算的\(FWT\)
然后就切掉辣
复杂度\(O(n2^n)\)
代码非常短
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
const int maxn = (1 << 20);
int n,N,cnt[maxn];
double p[maxn],ans;
int main(){
scanf("%d",&n); N = (1 << n);
for (int i = 0; i < N; i++) scanf("%lf",&p[i]);
for (int i = 1; i < N; i <<= 1)
for (int j = 0; j < N; j += (i << 1))
for (int k = 0; k < i; k++)
p[j + k + i] += p[j + k];
for (int i = 1; i < N; i++) cnt[i] = cnt[i >> 1] + (i & 1);
for (int i = 1; i < N; i++){
if (1.0 - p[(N - 1) ^ i] < 1e-9){puts("INF"); return 0;}
ans += ((cnt[i] & 1) ? 1.0 : -1.0) * (1.0 / (1 - p[(N - 1) ^ i]));
}
printf("%.9lf\n",ans);
return 0;
}
BZOJ4036 [HAOI2015]按位或 【minmax容斥 + 期望 + FWT】的更多相关文章
- Luogu3175 HAOI2015 按位或 min-max容斥、高维前缀和、期望
传送门 套路题 看到\(n \leq 20\),又看到我们求的是最后出现的位置出现的时间的期望,也就是集合中最大值的期望,考虑min-max容斥. 由\(E(max(S)) = \sum\limits ...
- [luogu 3175] [HAOI2015]按位或(min-max容斥+高维前缀和)
[luogu 3175] [HAOI2015]按位或 题面 刚开始你有一个数字0,每一秒钟你会随机选择一个[0,2^n-1]的数字,与你手上的数字进行按位或运算.问期望多少秒后,你手上的数字变成2^n ...
- luoguP3175 [HAOI2015]按位或 min-max容斥 + 高维前缀和
考虑min-max容斥 \(E[max(S)] = \sum \limits_{T \subset S} min(T)\) \(min(T)\)是可以被表示出来 即所有与\(T\)有交集的数的概率的和 ...
- bzoj 4036 [HAOI2015]按位或——min-max容斥+FMT
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4036 题解:https://www.cnblogs.com/Zinn/p/10260126. ...
- 【BZOJ4036】按位或(Min-Max容斥,FWT)
[BZOJ4036]按位或(Min-Max容斥,FWT) 题面 BZOJ 洛谷 题解 很明显直接套用\(min-max\)容斥. 设\(E(max\{S\})\)表示\(S\)中最晚出现元素出现时间的 ...
- UOJ 422 [集训队作业2018] 小Z的礼物 min-max容斥 期望 轮廓线dp
LINK:小Z的礼物 太精髓了 我重学了一遍min-max容斥 重写了一遍按位或才写这道题的. 还是期望多少时间可以全部集齐. 相当于求出 \(E(max(S))\)表示最后一个出现的期望时间. 根据 ...
- loj#2542. 「PKUWC2018」随机游走(MinMax容斥 期望dp)
题意 题目链接 Sol 考虑直接对询问的集合做MinMax容斥 设\(f[i][sta]\)表示从\(i\)到集合\(sta\)中任意一点的最小期望步数 按照树上高斯消元的套路,我们可以把转移写成\( ...
- bzoj 4036 按位或 —— min-max容斥+FMT
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4036 min-max容斥:https://blog.csdn.net/ez_2016gdgz ...
- [HAOI2015]按位或(min-max容斥,FWT,FMT)
题目链接:洛谷 题目大意:给定正整数 $n$.一开始有一个数字 $0$,然后每一秒,都有 $p_i$ 的概率获得 $i$ 这个数 $(0\le i< 2^n)$.一秒恰好会获得一个数.每获得一个 ...
随机推荐
- happybase(TSocket read 0 bytes)
关于报错happybase 是使用python连接hbase的一个第三方库,目前基于thrift1 .在使用过程中经常碰到报错 TTransportException(type=4, message= ...
- openstack horizon开发第一天
horizon插件构造 创建一个dashboardmkdir opesntack_dashboard/dashboards/mydashboardpython manage.py startdash ...
- PytorchZerotoAll学习笔记(一)
Pytorch的安装请参考torch的官方文档,传送门:https://pytorch.org/get-started/locally/ Numpy的复习 如果你之前没有学过Numpy的话,建议去看看 ...
- rest_framework_api规范
目录 一.什么是RESTful 二.什么是API 三.RESTful API规范 四.基于Django实现API 五.基于Django Rest Framework框架实现 一. 什么是RESTful ...
- scrapy有用的(代理,user-agent,随机延迟等)
代理 方法一(待测试) 见scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware import os # 设置相应的代理用户名密码,主机和 ...
- 2017年第八届蓝桥杯【C++省赛B组】
1.标题: 购物单 小明刚刚找到工作,老板人很好,只是老板夫人很爱购物.老板忙的时候经常让小明帮忙到商场代为购物.小明很厌烦,但又不好推辞. 这不,XX大促销又来了!老板夫人开出了长长的购物单,都是有 ...
- 个人作业Week7
1.在做个人项目的时候,由于很久都没有写这么大的程序了,对程序的感觉还没有恢复,因此,没能完全完成个人项目.现在回去看个人项目的代码(针对完成的代码来看),完全就是一个大泥球,代码的结构性太差,基本上 ...
- css3学习笔记三
css3有些特殊的元素选择器这和jquery相似.效果图如下
- PTA计算平均值(一波三折)
PTA计算平均值( 一波三折) 现在为若干组整数分别计算平均值. 已知这些整数的绝对值都小于100,每组整数的数量不少于1个,不大于20个. 输入格式:首先输入K(不小于2,不大于20).接下来每一行 ...
- windows下的C++ socket服务器(1)
windows下的一个C++ socket服务器,用到了C++11的相关内容,现在还不是很完善,以后会不断改进的! #include <winsock2.h>//1 以后会用这种方式对特定 ...