bzoj4036 / P3175 [HAOI2015]按位或
bzoj4036 / P3175 [HAOI2015]按位或
是一个 min-max容斥
的板子题。
min-max容斥
式子:
$ \displaystyle max(S) = \sum_{T\sube S} (-1)^{|T|+1} min(T) $
并且很优秀的是,它在期望情况下成立!
这个有什么关系呢。。
如果每一位分开考虑,如果第 $ i $ 位变成 1 的期望时间是 $ T(i) $
那么求的是 $ E(max(T_{1\dots n})) $
这个可以 min-max容斥
求 $ min $ 的就是某一个子集让其中某一个变成 1
的期望次数。
考虑一次选择可以让这个子集的某一个变成 1
的概率,就是 1 - 这个子集所有位都是 0 的数字的概率的和,可以考虑令 $ S $ 是除了子集的位是0其他都是1的数(集合),概率就是 $ 1 - \sum_{A[i] \sube S} p_i $ 每次选择是等价的,所以期望就是 $ \frac{1}{p} $
然后minmax容斥式子种 $ |T| $ 其实就是 $ S $ 中 0 的个数,就是n - popcount
这个的计算其实就是半个 或卷积
复杂度 $ O(n2^n) $
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<map>
using namespace std;
#define MAXN ( 1 << 21 ) + 6
int n;
double p[MAXN];
inline void FWT(double a[], int len) {
for (int mid = 2; mid <= len; mid <<= 1)
for (int i = 0; i < len; i += mid)
for (int j = i; j < i + (mid >> 1); j++)
a[j + (mid >> 1)] += a[j];
}
int main() {
cin >> n;
for( int i = 0 ; i < ( 1 << n ) ; ++ i ) scanf("%lf",&p[i]);
FWT( p , ( 1 << n ) );
double ans = 0.0;
for( int i = 0 ; i < ( 1 << n ) - 1; ++ i ) {
ans += ( ( n - __builtin_popcount( i ) & 1 ) ? 1.0 : -1.0 ) / ( 1.0 - p[i] );
}
if( ans > 1e50 ) puts("INF");
else printf("%.7lf",ans);
}
bzoj4036 / P3175 [HAOI2015]按位或的更多相关文章
- 【BZOJ4036】[HAOI2015]按位或 FWT
[BZOJ4036][HAOI2015]按位或 Description 刚开始你有一个数字0,每一秒钟你会随机选择一个[0,2^n-1]的数字,与你手上的数字进行或(c++,c的|,pascal的or ...
- luogu P3175 [HAOI2015]按位或
传送门 如果每个位置上的数字的意义是这个位置被加进集合的最早时间,那么我们要求的就是集合中最大数的期望,使用Min-Max容斥,\(E(max(S))=\sum_{T\subset S}(-1)^{| ...
- P3175 [HAOI2015]按位或
传送门 一如既往膜拜shadowice巨巨 前置姿势我就没一个会的-- //minamoto #include<bits/stdc++.h> #define R register #def ...
- [洛谷P3175][HAOI2015]按位或
题目大意:刚开始有一个数$x=0$,每秒钟有一个数$y\in[0,2^n)(n\leqslant20)$按一定概率随机出现,数$i$的概率为$p_i$,保证$\sum\limits_{i=0}^{2^ ...
- 洛谷 P3175 [HAOI2015]按位或
题目分析 与hdu4336 Card Collector相似,使用min-max容斥. 设\(\max(S)\)表示集合\(S\)中最后一位出现的期望时间. 设\(\min(S)\)表示集合\(S\) ...
- 【bzoj4036】[HAOI2015]按位或 fmt+期望
Description 刚开始你有一个数字0,每一秒钟你会随机选择一个[0,2^n-1]的数字,与你手上的数字进行或(c++,c的|,pascal 的or)操作.选择数字i的概率是p[i].保证0&l ...
- [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 [HAOI2015]按位或 FWT
原文链接https://www.cnblogs.com/zhouzhendong/p/BZOJ4036.html 题目传送门 - BZOJ4036 题意 刚开始你有一个数字 $0$ ,每一秒钟你会随机 ...
随机推荐
- 小白自制Linux开发板 八. Linux音频驱动配置
不知不觉小白自制开发板系列已经到第八篇了,本篇要配置的是音频驱动,也算是硬件部分的最后一片了,积攒的文章也差不多全放完了,后续更新可能会放缓,还请见谅. 对于F1C200s是自带了多媒体处理功能的,所 ...
- 6. 站在巨人的肩膀学习Java Filter型内存马
本文站在巨人的肩膀学习Java Filter型内存马,文章里面的链接以及图片引用于下面文章,参考文章: <Tomcat 内存马学习(一):Filter型> <tomcat无文件内存w ...
- 类图示例-订单系统 / Class Diagram - Order System
类图示例-订单系统 / Class Diagram - Order System 什么是类图? 类图通过显示它的类和它们之间的关系来概述系统.类图是静态的 - 它们显示交互的内容,但不显示交互时会发生 ...
- python查询对像所有方法
鉴于学习时好多参数对像都不知道是什么玩意有什么方法,搜了半天一个 """arg为一个对像,下面是打印所有对像方法"""for i, func ...
- BUAA软件工程结对项目作业
BUAA软件工程结对项目 小组成员:16005001,17373192 1.教学班级和项目地址 项目 内容 这个作业属于哪个课程 博客园班级连接 这个作业的要求在哪里 结对项目作业 我在这个课程的目标 ...
- Spring Security:Authorization 授权(二)
Authorization 授权 在更简单的应用程序中,身份验证可能就足够了:用户进行身份验证后,便可以访问应用程序的每个部分. 但是大多数应用程序都有权限(或角色)的概念.想象一下:有权访问你的面向 ...
- Xpath语法学习记录
高级参考:https://blog.csdn.net/wudaoshihun/article/details/82226122 举例: 1 <!DOCTYPE html> 2 <ht ...
- 构建乘积数组 牛客网 剑指Offer
构建成绩数组 牛客网 剑指Offer 题目描述 给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]A[1]...*A[i-1]A[i ...
- Python Linux Ubuntu apt安装PyCharm
PyCharm一个是Python集成开发环境,它既提供收费的专业版,也提供免费的社区版本.PyCharm带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试.语法高亮.Proj ...
- 猫狗收容所 牛客网 程序员面试金典 C++
猫狗收容所 牛客网 程序员面试金典 C++ 题目描述 有家动物收容所只收留猫和狗,但有特殊的收养规则,收养人有两种收养方式,第一种为直接收养所有动物中最早进入收容所的,第二种为选择收养的动物类型(猫或 ...