[HAOI2015]按位或(FWT)
[Luogu3175] [BZOJ4036] [DarkBZOJ没有spj]
我们要求的,实际上是一个集合\(n\)个\(1\)中最晚出现的\(1\)的期望时间
显然\(minmax\)容斥
\(E(max\{S\})=∑_{T⊆S}(−1)^{|T|+1}E(min\{T\})\)
那么问题就转化为了求每个集合中最早出现的\(1\)的期望时间
假如在\(k\)时刻出现,那么前\(k−1\)时刻一定都是取的补集的子集,记\(T\)补集的所有子集概率和为\(P\)
\(E(min\{T\})=∑_{k=1}^{∞}kP(1−P)^{k−1}\)
是一个离散变量的几何分布
设\(P(x=a)=p\)
那么取到\(a\)的期望为
\(E(x=a)=∑_{k=1}^{∞}k(1−p)^{k−1}p=p∑_{k=1}^{∞}k(1−p)^{k−1}\)
记\(f(x)=1+2x+3x^2+4x^3+…\)
则\(xf(x)=x+2x^2+3x^3+4x^4+…\)
则\((1−x)f(x)=1+x+x^2+x^3+…\)
对于\(0<x<1,(1−x)f(x)\)是收敛的,可以取到
\((1−x)f(x)=\frac{1}{1−x}\)
\(f(x)=\frac{1}{(1−x)^2}\)
所以
\(E(x=a)=p\frac{1}{p^2}=\frac{1}{p}\)
非常棒
于是有
\(E(min{T})=\frac{1}{1−P}\)
我们只需要求出所有集合的子集概率和就好了
其实就是或运算的\(FWT\)
#include<cstdio>
#include<cstring>
using namespace std;
typedef long long LL;
const int INF=1e9+7;
inline LL read(){
register LL x=0,f=1;register char c=getchar();
while(c<48||c>57){if(c=='-')f=-1;c=getchar();}
while(c>=48&&c<=57)x=(x<<3)+(x<<1)+(c&15),c=getchar();
return f*x;
}
const int MAXN=1<<20;
const double eps=1e-8;
double f[MAXN],ans;
int bit[MAXN],n,len;
int main(){
n=read();len=1<<n;
for(int i=0;i<len;i++) scanf("%lf",&f[i]);
for(int i=2;i<=len;i<<=1){
for(int j=0,p=i>>1;j<len;j+=i)
for(int k=j;k<j+p;k++)
f[k+p]+=f[k];//这里的特殊写法有助于理解FWT,FFT系列操作
}
for(int i=0;i<len;i++) bit[i]=bit[i>>1]+(i&1);
for(int i=1;i<len;i++){
double tmp=(1-f[(len-1)^i]);
if(tmp<eps){printf("INF\n");return 0;}
if(bit[i]&1) ans+=1.0/tmp;
else ans-=1.0/tmp;
}
printf("%.8lf\n",ans);
}
[HAOI2015]按位或(FWT)的更多相关文章
- 【BZOJ4036】[HAOI2015]按位或 FWT
[BZOJ4036][HAOI2015]按位或 Description 刚开始你有一个数字0,每一秒钟你会随机选择一个[0,2^n-1]的数字,与你手上的数字进行或(c++,c的|,pascal的or ...
- BZOJ4036 [HAOI2015]按位或 FWT
原文链接https://www.cnblogs.com/zhouzhendong/p/BZOJ4036.html 题目传送门 - BZOJ4036 题意 刚开始你有一个数字 $0$ ,每一秒钟你会随机 ...
- [BZOJ 4036][HAOI2015]按位或
4036: [HAOI2015]按位或 Time Limit: 10 Sec Memory Limit: 256 MBSec Special JudgeSubmit: 746 Solved: 4 ...
- bzoj4036 / P3175 [HAOI2015]按位或
bzoj4036 / P3175 [HAOI2015]按位或 是一个 min-max容斥 的板子题. min-max容斥 式子: $ \displaystyle max(S) = \sum_{T\su ...
- [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)$.一秒恰好会获得一个数.每获得一个 ...
- 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 ...
- [HAOI2015]按位或(容斥+前缀和)
题目描述 刚开始你有一个数字0,每一秒钟你会随机选择一个[0,2^n-1]的数字,与你手上的数字进行或(c++,c的|,pascal 的or)操作.选择数字i的概率是p[i].保证0<=p[i] ...
随机推荐
- day18-事务与连接池 2.事务介绍与mysql下事务操作
这么玩 真的变了吗?把cmd窗口关闭了看看. 就是固定的套路才行:start transaction->执行SQL->rollback; 执行每一条SQL之前都要start transac ...
- 501. Find Mode in Binary Search Tree查找BST中的众数
[抄题]: Given a binary search tree (BST) with duplicates, find all the mode(s) (the most frequently oc ...
- struts2 框架的基本使用
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http:// ...
- Browser
浏览器中关于事件的那点事儿 作者: 顽Shi 发布时间: 2014-02-01 20:22 阅读: 7830 次 推荐: 25 原文链接 [收藏] 摘要:事件在Web前端领域有很重要 ...
- c++ 指向类成员函数的函数指针
// ConsoleApplication34.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream& ...
- ByteUnit
JDK里面有TimeUnit,看spark源码有个ByteUnit.这个类还是挺不错的. public enum ByteUnit { BYTE (1), KiB (1024L), MiB ((lon ...
- WIN XP蓝屏代码大全
转自:廊坊师范学院信息技术提高班---韩正阳 http://blog.csdn.net/jiudihanbing WIN XP蓝屏代码大全WIN XP蓝屏代码大全一.蓝屏含义 1.故障检查信息 *** ...
- 黑盒测试实践--Day4 11.28
黑盒测试实践--Day4 11.28 今天完成任务情况: 分块明确自己部分的工作,并做前期准备 完成被测系统--学生管理系统的需求规格说明书 完成Mook上高级测试课程的第六章在线学习,观看自动化测试 ...
- C++函数后面加throw关键字简记
看代码时候看到fun() throw()的用法,找到一篇blog解释很简单,如下: C++函数后面加关键字throw(something)限制,是对这个函数的异常安全性作出限制. 举例及解释如下: v ...
- C# How To Read .xlsx Excel File With 3 Lines Of Code
Download Excel.zip - 9.7 KB Download ExcelDLL.zip - 3.7 KB Introduction We produce professional busi ...