Luogu3175 按位或

Arahc 11.0

题面

简化题意

有一个变量 aa,初始为 00。每次在 [0,2n1][0,2^n-1] 中随机选择一个数并让 aa 或上它。给定每个数选择的概率,求期望多少次能使 a=2n1a=2^n-1

题解

离散随机变量:一个取值范围为一些特定的不连续值的随机变量,比如随机取一个自然数。

如果离散随机变量 xx 满足如下式子(nn 为常数),则称这个离散随机变量服从参数 nn几何分布

P(x=k)=n(1n)k1kN+P(x=k) = n(1-n)^{k-1} \qquad k\in \mathbb{N}^+

这个东西满足一个结论:

E(x)=1nE(x) = \frac{1}{n}

感性理解就是,假设 xf 有 1100000\frac{1}{100000} 的概率不和 aa 贴贴,99999100000\frac{99999}{100000} 的概率贴贴。那么 aa 恰好在第 kk 天发现以前每天都贴贴,但今天 xf 没有和他贴贴的概率为:

(99999100000)k1×1100000\left( \frac{99999}{100000} \right)^{k-1} \times \frac{1}{100000}

不难发现贴贴事件符从参数 1100000\frac{1}{100000} 的几何分布,因此 xf 期望 100000100000 天即大约 274274 年里会有一天不贴贴。可以看出期望就是 1n\frac{1}{n}

理性理解就是:

E(x)=iiP(x=i)=nii(1n)i1=n[ii(1n)i+i=0(1n)i]=n(1nn2+1n)=1n\begin{aligned} E(x) &= \sum_i i P(x=i) \\ &= n\sum_i i(1-n)^{i-1} \\ &= n\left[ \sum_i i(1-n)^i + \sum_{i=0}(1-n)^i \right] \\ &= n(\frac{1-n}{n^2} + \frac{1}{n}) \\ &= \frac{1}{n} \end{aligned}

回到这个问题,考虑用 minmax 容斥,转化为对于所有集合 TST\subseteq STT 中至少有一个变成 11 的最早时间。记 P(minT=k)P(\min T = k) 表示前 k1k-1 次没有选中,第 kk 次恰好选中的概率:

P(minT=k)=(1P(ST))k1P(ST)P(\min T = k) = ( 1-P(S\cap T \neq \varnothing) )^{k-1} P(S\cap T \neq \varnothing)

到这里,只要能求出 P(ST)P(S\cap T \neq \varnothing) 就结束了。

将集合写成变量的二进制位,也就是转化为 P(ST)P(S\oplus T)。所以问题直接转化为怎么求 P(T)P(T)。考虑 FWT 的按位或卷积。对原概率数组求一遍 FWT,就能求出所有 P(T)P(T) 了。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include<bits/stdc++.h>
using namespace std;
const int max_n=2000006;

int n,S,sz[max_n];
long double ans,f[max_n];

inline void OR(){ // FWT
for(register int k=1,l=2;l<=S;l<<=1,k<<=1)
for(register int i=0;i<S;i+=l)
for(register int j=0;j<k;++j)
f[i+j+k]+=f[i+j];
}

signed main(){
ios::sync_with_stdio(false),cin.tie(0);
cin>>n;S=(1<<n);
for(register int i=0;i<S;++i)
cin>>f[i];
OR();
for(register int i=1;i<S;++i)
sz[i]=sz[i>>1]+(i&1);
for(register int i=1;i<S;++i){
if(1-f[(S-1)^i]<0.000000001){
puts("INF");
return 0;
}
ans+=(sz[i]&1?1:-1)*((long double)1/(1-f[(S-1)^i]));
}
printf("%.15Lf",ans);
return 0;
}
  • 标题: Luogu3175 按位或
  • 作者: Arahc
  • 创建于 : 2022-01-17 08:00:00
  • 更新于 : 2023-03-17 13:13:14
  • 链接: https://arahc.github.io/2022/01/17/【题解】Luogu3175-按位或/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论
目录
Luogu3175 按位或