洛谷 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\)个 ...
随机推荐
- Hibernate一对多关系操作
1.创建两个实体类. 一个实体类是商品类,另一个实体类是商品的分类类. 在一对多关系的两个实体中,在编写实体类时必须要遵循以下规则: (1)在一的那一方的实体中,必须要有一个私有的多那一方的实体对象属 ...
- 【c++】访问控制
1. 类内的访问控制 在基类中,public和private具有普通的含义:用户(即基类的对象)可以访问public成员(包括函数.数据),而不能访问private成员.private只能被基类的成 ...
- 级联sql
select ID, PID, NAME,KEY from HS_DICT start with KEY = 'HS_EXP_WORK_LOCATION'connect by prior ID = P ...
- bzoj 2164: 采矿
Description 浩浩荡荡的cg大军发现了一座矿产资源极其丰富的城市,他们打算在这座城市实施新的采矿战略.这个城市可以看成一棵有n个节点的有根树,我们把每个节点用1到n的整数编号.为了方便起见, ...
- MVVM - 事件转命令2
在使用MVVM模式时, 按照模式的规则是尽量不直接使用事件. 所以对于以前一直使用事件模式的同行来说确实有点头疼. 还好微软给我们提供了几种间接使用事件(命令)的方法, 下面我就来看看这几种方法: I ...
- K2.ActivityInstanceDestination.User is NULL
his one caught me by surprise! I needed to build up a CSV list of email addresses for all previous t ...
- Maven 配置tomcat和findbug插件(在eclipse建立的项目中)
tomcat插件 a) tomcat的maven插件可以在tomcat的官网上寻找,这就是tomcat插件的plugin b) 将tomcat的plugin配置到项目的po ...
- 动态赋值poster,无法显示
vue操作video的poster属性时,动态给poster赋值,在chrome下是无法显示的 解决办法 在赋值后,找到video元素.load()下就会看到封面图了
- C语言实现整数数组的逆置算法
读入100个整数到一个数组中,写出实现该数组进行逆置的算法. 方法一: 假设100个整数读入到数组a中,算法f1的思想是分别从数组两端依次将对应数进行交换,即a[i]与a[100 - i - 1]进行 ...
- Bootstrap + AngularJS+ Ashx + SQL Server/MySQL
去年年底12月,为适应移动端浏览需求,花了1个月时间学习Bootstrap,并将公司ASP网站重构成ASP.NET. 当时采取的网站架构: Bootstrap + jQuery + Ashx + SQ ...