[Luogu3175] [BZOJ4036] [DarkBZOJ没有spj]

原理-shadowice

本题题解

我们要求的,实际上是一个集合\(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);
}

最新文章

  1. 命令行模式下 MYSQL导入导出.sql文件的方法
  2. 每天一个linux命令(41):at命令
  3. List of devices attached ???????????? no permissions
  4. jszs 对象引用
  5. LIMITS.H
  6. Java 与 Python 的对比
  7. Win32中GDI+应用(五)--GDI与GDI+编程模型的区别
  8. xml和html之间相互转换
  9. HTML5学习笔记简明版 目录索引
  10. 体系结构复习2——指令级并行(分支预測和VLIW)
  11. 14.4.4 Configuring the Memory Allocator for InnoDB InnoDB 配置内存分配器
  12. 当引用了Properties.Settings后,如果执行的时候,出现&quot;配置系统无法初始化&quot; 或者 某某节点不正确
  13. 关于http与https区别
  14. xPath Helper插件
  15. MySQL防止库存超卖方法总结
  16. 当前 .NET SDK 不支持将 .NET Core 2.1 设置为目标。请将 .NET Core 2.0 或更低版本设置为目标,或使用支持 .NET Core 2.1 的 .NET SDK 版本。
  17. python shell与反弹shell
  18. JS中字符串那些事~
  19. JAVA-JSP内置对象之application对象
  20. Oracle SQL Developer保持数据库连接的方法

热门文章

  1. linux SIGSEGV 信号捕捉,保证发生段错误后程序不崩溃
  2. solidity mapping of mapping
  3. Linux tmux
  4. 高级软件测试技术(测试管理工具实践day4)
  5. [GO]将随机生成的四位数字拆分后放到一个切片里
  6. javascript总结15:Break语句 与 continue语句
  7. WindowsService服务安装脚本
  8. [.net 多线程]ThreadPool的安全机制
  9. EF 热加载 Winform/Asp.net
  10. (一)springmvc+spring+mybatis+maven框架搭建