Luogu3175 HAOI2015 按位或 min-max容斥、高维前缀和、期望
套路题
看到\(n \leq 20\),又看到我们求的是最后出现的位置出现的时间的期望,也就是集合中最大值的期望,考虑min-max容斥。
由\(E(max(S)) = \sum\limits_{T \subset S} (-1)^{|T| + 1} E(min(T))\),我们要求的就是一个集合至少有一个数字出现的期望时间。那么\(E(min(T)) = \frac{1}{\sum\limits_{S' \cap T \neq \emptyset} p_{S'}}\)。
\(\sum\limits_{S' \cap T \neq \emptyset} p_{S'}\)不是很好求,考虑反过来求。它等于\(1 - \sum\limits_{S' \cap T = \emptyset} p_{S'} = 1 - \sum\limits_{S' \subset (2^N - 1 - T)}p_{S'}\),而$ \sum\limits_{S' \subset (2^N - 1 - T)}p_{S'}$就是子集和,高维前缀和求解即可。
#include<bits/stdc++.h>
#define ld long double
//This code is written by Itst
using namespace std;
inline int read(){
int a = 0;
char c = getchar();
bool f = 0;
while(!isdigit(c) && c != EOF){
if(c == '-')
f = 1;
c = getchar();
}
if(c == EOF)
exit(0);
while(isdigit(c)){
a = a * 10 + c - 48;
c = getchar();
}
return f ? -a : a;
}
long double p[1 << 20];
int N , cnt1[1 << 20];
int main(){
#ifndef ONLINE_JUDGE
freopen("in","r",stdin);
freopen("out","w",stdout);
#endif
cin >> N;
int all = 0;
for(int i = 0 ; i < 1 << N ; ++i){
cin >> p[i];
cnt1[i] = cnt1[i >> 1] + (i & 1);
if(p[i] > 1e-6)
all |= i;
}
if(all != (1 << N) - 1){
puts("INF");
return 0;
}
for(int i = 0 ; i < N ; ++i)
for(int j = 0 ; j < 1 << N ; ++j)
if(!(j & (1 << i)))
p[j | (1 << i)] += p[j];
ld sum = 0;
for(int i = 0 ; i < 1 << N ; ++i)
if(1 - p[((1 << N) - 1) ^ i] > 1e-7)
sum = sum + (cnt1[i] & 1 ? 1 : -1) / (1 - p[((1 << N) - 1) ^ i]);
cout << fixed << setprecision(6) << sum;
return 0;
}
Luogu3175 HAOI2015 按位或 min-max容斥、高维前缀和、期望的更多相关文章
- BZOJ4036:按位或 (min_max容斥&高维前缀和)
Description 刚开始你有一个数字0,每一秒钟你会随机选择一个[0,2^n-1]的数字,与你手上的数字进行或(c++,c的|,pascal 的or)操作.选择数字i的概率是p[i].保证0&l ...
- [luogu 3175] [HAOI2015]按位或(min-max容斥+高维前缀和)
[luogu 3175] [HAOI2015]按位或 题面 刚开始你有一个数字0,每一秒钟你会随机选择一个[0,2^n-1]的数字,与你手上的数字进行按位或运算.问期望多少秒后,你手上的数字变成2^n ...
- [HAOI2015]按位或(min-max容斥,FWT,FMT)
题目链接:洛谷 题目大意:给定正整数 $n$.一开始有一个数字 $0$,然后每一秒,都有 $p_i$ 的概率获得 $i$ 这个数 $(0\le i< 2^n)$.一秒恰好会获得一个数.每获得一个 ...
- luoguP3175 [HAOI2015]按位或 min-max容斥 + 高维前缀和
考虑min-max容斥 \(E[max(S)] = \sum \limits_{T \subset S} min(T)\) \(min(T)\)是可以被表示出来 即所有与\(T\)有交集的数的概率的和 ...
- BZOJ4036 [HAOI2015]按位或 【minmax容斥 + 期望 + FWT】
题目链接 BZOJ4036 题解 好套路的题啊,,, 我们要求的,实际上是一个集合\(n\)个\(1\)中最晚出现的\(1\)的期望时间 显然\(minmax\)容斥 \[E(max\{S\}) = ...
- bzoj 4036: [HAOI2015]按位或【min-max容斥+FWT】
其实也不是FWT--我也不知道刷FWT专题问什么会刷出来这个东西 这是min-max容斥讲解:https://www.zybuluo.com/ysner/note/1248287 总之就是设min(s ...
- Codeforces.449D.Jzzhu and Numbers(容斥 高维前缀和)
题目链接 \(Description\) 给定\(n\)个正整数\(a_i\).求有多少个子序列\(a_{i_1},a_{i_2},...,a_{i_k}\),满足\(a_{i_1},a_{i_2}, ...
- 【BZOJ4036】按位或(Min-Max容斥,FWT)
[BZOJ4036]按位或(Min-Max容斥,FWT) 题面 BZOJ 洛谷 题解 很明显直接套用\(min-max\)容斥. 设\(E(max\{S\})\)表示\(S\)中最晚出现元素出现时间的 ...
- [Hdu-6053] TrickGCD[容斥,前缀和]
Online Judge:Hdu6053 Label:容斥,前缀和 题面: 题目描述 给你一个长度为\(N\)的序列A,现在让你构造一个长度同样为\(N\)的序列B,并满足如下条件,问有多少种方案数? ...
随机推荐
- 微软Azure AspNetCore微服务实战 第二期
2018新年快乐!继第1期微服务技术交流活动后(http://www.huodongxing.com/event/4403161781600),本次我们将与上海的小伙伴们继续深入分享微服务技术的应用实 ...
- Jenkins 解决Jenkins下java无法运行slave-agent jnlp程序连接Windows Slave主机
解决Jenkins下java无法运行slave-agent jnlp程序连接Windows Slave主机 by:授客 QQ:1033553122 测试环境 java下载地址:http://www ...
- sysbench对MySQL的压测,使用sysbench压测磁盘io
QPS - query per secondTPS - transaction per second 不是特别关注,每个业务场景中事务标准是不一样的 Ⅰ.sysbench测试框架 Ⅱ.常用测试脚本 [ ...
- 【问题集】VS新建项目——失败——弹出“未将对象引用设置到对象的实例”
- PHP LAMP环境搭建及网站配置流程(完整版)
心血来潮想做一个自己的博客网站,写一些文章做技术分享,平时遇到的一些问题的解决办法都记录下来,网站搭建成功,那么第一篇博客自然就是整个网站的搭建以及域名的注册.备案.解析流程,总共分为以下几步: 1. ...
- Hive-1.2.1_05_案例操作
1. 建库建表 # 建库 create database exercise; # 建表 create table student(Sno int,Sname string,Sex string,Sag ...
- Go学习笔记03-结构控制
目录 条件语句 循环语句 条件语句 条件语句用 if 关键字来判定条件,如: func bounded(v int) int { if v > 100 { return 100 } else i ...
- CF 633 E. Binary Table
题目链接 题目大意:给定一个棋盘,棋盘上有0或1,你可以将一整行取反或者一整列取反,要使得最后剩的1最少.\((1\le n\le 20,1\le m\le 100000)\). 一个容易想到的思路就 ...
- UVA127-"Accordian" Patience(模拟)
Problem UVA127-"Accordian" Patience Accept:3260 Submit:16060 Time Limit: 3000 mSec Proble ...
- 转://oracle 11G+ASM for Linux手工建库
环境描述 环境:Oracle Linux 6.5 + ORACLE 11g R2+ASM ORACLE的程序已经安装完毕.但是没有创建任何数据库. 实验内容 安装ORACLE11g数据库,不使用DBC ...