洛谷 P3175 [HAOI2015]按位或
题目分析
与hdu4336 Card Collector相似,使用min-max容斥。
设\(\max(S)\)表示集合\(S\)中最后一位出现的期望时间。
设\(\min(S)\)表示集合\(S\)中最初一位出现的期望时间。
由min-max容斥可得:
\(\max(T)=\sum\limits_{S \subseteq T}(-1)^{|T|-1}\min(S)\)
考虑求每一个\(\min(S)\)。
一个很显然的暴力代码:
for(int i=0;i<(1<<n);i++){
double tot=0;
for(int j=0;j<(1<<n);j++)if(i&j)tot+=p[j];
Min[i]=tot;
}
我们考虑对于每一个集合\(S\),实质上只有与它没有交集的数对它没有贡献。
那么我们可以用总贡献减去与它没有交集的数的贡献。
即对于每一个数,只需要对它的补集的子集全部减去它的贡献即可。
这个很显然能够\(O(nlogn)\)计算出来。
那么就做完啦。
#include <bits/stdc++.h>
using namespace std;
int n;
double p[(1<<20)+5],a[25];
int main(){
scanf("%d",&n);
for(int i=0;i<(1<<n);i++){
double x;
scanf("%lf",&x);
p[((1<<n)-1)^i]+=x;
for(int j=0;j<n;j++)
if(i&(1<<j))a[j]+=x;
}
for(int i=0;i<n;i++)if(!a[i]){puts("INF");return 0;}
for(int j=0;j<n;j++)
for(int i=0;i<(1<<n);i++)
if(i&(1<<j))p[i^(1<<j)]+=p[i];
for(int i=0;i<(1<<n);i++)p[i]=1-p[i];
double ans=0;
for(int i=1;i<(1<<n);i++){
int f=(__builtin_popcount(i)&1)?1:-1;
ans+=f/p[i];
}
cout<<fixed<<setprecision(7)<<ans<<"\n";
}
洛谷 P3175 [HAOI2015]按位或的更多相关文章
- [洛谷P3175][HAOI2015]按位或
题目大意:刚开始有一个数$x=0$,每秒钟有一个数$y\in[0,2^n)(n\leqslant20)$按一定概率随机出现,数$i$的概率为$p_i$,保证$\sum\limits_{i=0}^{2^ ...
- 洛谷 P3177 [HAOI2015]树上染色 树形DP
洛谷 P3177 [HAOI2015]树上染色 树形DP 题目描述 有一棵点数为 \(n\) 的树,树边有边权.给你一个在 \(0 \sim n\)之内的正整数 \(k\) ,你要在这棵树中选择 \( ...
- bzoj4036 / P3175 [HAOI2015]按位或
bzoj4036 / P3175 [HAOI2015]按位或 是一个 min-max容斥 的板子题. min-max容斥 式子: $ \displaystyle max(S) = \sum_{T\su ...
- BZOJ4033或洛谷3177 [HAOI2015]树上染色
BZOJ原题链接 洛谷原题链接 很明显的树形\(DP\). 因为记录每个点的贡献很难,所以我们可以统计每条边的贡献. 对于每一条边,设边一侧的黑点有\(B_x\)个,白点有\(W_x\),另一侧黑点有 ...
- 洛谷P3178 [HAOI2015]树上操作(dfs序+线段树)
P3178 [HAOI2015]树上操作 题目链接:https://www.luogu.org/problemnew/show/P3178 题目描述 有一棵点数为 N 的树,以点 1 为根,且树点有边 ...
- 洛谷P3178 [HAOI2015]树上操作
题目描述 有一棵点数为 N 的树,以点 1 为根,且树点有边权.然后有 M 个操作,分为三种:操作 1 :把某个节点 x 的点权增加 a .操作 2 :把某个节点 x 为根的子树中所有点的点权都增加 ...
- luogu P3175 [HAOI2015]按位或
传送门 如果每个位置上的数字的意义是这个位置被加进集合的最早时间,那么我们要求的就是集合中最大数的期望,使用Min-Max容斥,\(E(max(S))=\sum_{T\subset S}(-1)^{| ...
- P3175 [HAOI2015]按位或
传送门 一如既往膜拜shadowice巨巨 前置姿势我就没一个会的-- //minamoto #include<bits/stdc++.h> #define R register #def ...
- 洛谷 P3177 [HAOI2015]树上染色
题目链接 题目描述 有一棵点数为 \(N\) 的树,树边有边权.给你一个在 \(0~ N\) 之内的正整数 \(K\) ,你要在这棵树中选择 \(K\)个点,将其染成黑色,并将其他 的\(N-K\)个 ...
随机推荐
- sqlite、mysql 将时间戳转换成本地时间语句
sqlite:SELECT datetime(createdTime, 'unixepoch', 'localtime'); mysql:SELECT FROM_UNIXTIME( 124948800 ...
- C语言入门语法
一.数据类型 常量 1.通过预处理声明常量 #include <stdio.h> #define PRICE 100 int main() { printf("价格:%d\n&q ...
- java并发编程(1)并发程序的取消于关闭
一.任务的取消于关闭 1.中断Thread 1.每个线程都有一个boolean类型的中断状态.true则是中断状态中 interrupt:发出中断请求:isInterrupt:返回中断状态:inter ...
- Application全局应用程序类
当一个WPF应用程序启动时,先会实例化一个全局的唯一的Application.如果开发人员熟悉Windows Form编程,会知道在SystemWindowsForm命名空间中有一个Applicati ...
- Expression Blend实例中文教程(3) - 布局控件快速入门Grid
上一篇对Blend 3开发界面进行了快速入门介绍,本篇将基于Blend 3介绍Silverlight控件.对于微软开发工具熟悉的朋友,相信您很快就熟悉Blend的开发界面和控件. XAML概述 Sil ...
- C#基础知识-使用XML完成一个小程序(十一)
上一篇中讲到XML基本的结构,还有增删改查的方法,这一篇中我们就来利用XML来完成一个简单的订单系统,主要是实现一个简单学生名单的增删改查,如果想要应用到实际的环境中建议考虑数据量的问题,如果数据量大 ...
- web.xml配置文件中async-supported报错解决
项目中配置spring时async-supported报错: 是因为<async-supported>true</async-supported>是web.xml 3.0的新特 ...
- 八、cent OS下tomcat启用APR并发模式
Tomcat支持三种接收请求的处理方式: BIO.NIO.APR ,本文记录tomcat配置APR模式,也是首选的模式.(Tomcat7 或以下,在 Linux 系统中默认使用BIO方式) 安装依赖库 ...
- <td>标签scope属性
HTML <td> 标签的 scope 属性 HTML <td> 标签 实例 下面的例子把两个 th 元素标识为列的表头,把两个 td 元素标识为行的表头: <table ...
- php查找字符串中第一个非0的位置截取
$str = '00000000000000000000000000000000000000001234506'; $preg = '/[0]*/'; $result = preg_replace($ ...