[HAOI2015]按位或(FWT)
2024-08-25 16:19:05
[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);
}
最新文章
- 命令行模式下 MYSQL导入导出.sql文件的方法
- 每天一个linux命令(41):at命令
- List of devices attached ???????????? no permissions
- jszs 对象引用
- LIMITS.H
- Java 与 Python 的对比
- Win32中GDI+应用(五)--GDI与GDI+编程模型的区别
- xml和html之间相互转换
- HTML5学习笔记简明版 目录索引
- 体系结构复习2——指令级并行(分支预測和VLIW)
- 14.4.4 Configuring the Memory Allocator for InnoDB InnoDB 配置内存分配器
- 当引用了Properties.Settings后,如果执行的时候,出现";配置系统无法初始化"; 或者 某某节点不正确
- 关于http与https区别
- xPath Helper插件
- MySQL防止库存超卖方法总结
- 当前 .NET SDK 不支持将 .NET Core 2.1 设置为目标。请将 .NET Core 2.0 或更低版本设置为目标,或使用支持 .NET Core 2.1 的 .NET SDK 版本。
- python shell与反弹shell
- JS中字符串那些事~
- JAVA-JSP内置对象之application对象
- Oracle SQL Developer保持数据库连接的方法
热门文章
- linux SIGSEGV 信号捕捉,保证发生段错误后程序不崩溃
- solidity mapping of mapping
- Linux tmux
- 高级软件测试技术(测试管理工具实践day4)
- [GO]将随机生成的四位数字拆分后放到一个切片里
- javascript总结15:Break语句 与 continue语句
- WindowsService服务安装脚本
- [.net 多线程]ThreadPool的安全机制
- EF 热加载 Winform/Asp.net
- (一)springmvc+spring+mybatis+maven框架搭建