[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] ...
随机推荐
- 分布式文件系统MFS(moosefs)实现存储共享
分布式文件系统MFS(moosefs)实现存储共享(第二版) 作者:田逸(sery@163.com) 由于用户数量的不断攀升,我对访问量大的应用实现了可扩展.高可靠的集群部署(即lvs+keepali ...
- Linux Java Meven环境变量设置
linux中的环境变量设置,可以在两个地方设置.他们分别是: /etc/profile 在这个文件下设置表示全局的,所有用户有效. 用户工作目录,用 ls -a查看,可以看到有一个.bash_pro ...
- 关于sleep的理解
unix是按时间片轮转调度, windows是抢占式调度 以吃蛋糕为例子,10个人吃蛋糕,如果是unix下, 假设开始时,每个人都处于就绪状态,那么操作系统调度大家排好队,按顺序吃,每个人吃1分钟, ...
- 当集合里存储的是URL时的一些问题总结
先看道题吧: package com.lk.C; import java.net.MalformedURLException; import java.net.URL; import java.uti ...
- Openssl ca命令
一.简介 ca命令能够签发证书请求文件以及生成CRL列表 二.语法 openssl ca [-verbose] [-config filename] [-name section] [-gencrl] ...
- Linq to SQL Like Operator
As a response for customer's question, I decided to write about using Like Operator in Linq to SQL q ...
- POJ3026 Borg Maze(bfs求边+最小生成树)
Description The Borg is an immensely powerful race of enhanced humanoids from the delta quadrant of ...
- XE下创建及调用Frame
1.创建Form1: 2.创建FMXFrame(New -> Other->Delphi Files -> FMXFrame); // 单元名为UnitFrame,窗体名为frm ...
- CreateExcel 导出Excel
public class CreateExcel { /// <summary> /// 用Excel组件导出Excel文件 /// </summary> /// <pa ...
- [转]android中最好的瀑布流控件PinterestLikeAdapterView
PinterestLikeAdapterView 项目地址:https://github.com/GDG-Korea/PinterestLikeAdapterView 使用方法类似于ListView下 ...