BZOJ4036 按位或


解:有两种做法......
第一种,按照秘密袭击coat的套路,我们只需要求出
即可。因为一种操作了i次的方案会被恰好计数i次。
那么这个东西怎么求呢?直接用FWT的思想,对于一个状态s,求出选择s所有子集的概率ps。那么第i次操作后是s的子集的概率就是psi。
设fs表示第i次操作之后是s的子集的概率。

把所有的f求出来之后做一次IFWT即可。然后我们对于所有非全集求和。
参考资料。
#include <bits/stdc++.h> const int N = , M = ;
const double eps = 1e-; double f[M], p[M], w[M];
int cnt[M], pw[M], n, lm; inline void FWT_or(double *a, int n, int f) {
for(int len = ; len < n; len <<= ) {
for(int i = ; i < n; i += (len << )) {
for(int j = ; j < len; j++) {
a[i + len + j] += f * a[i + j];
}
}
}
return;
} int main() {
scanf("%d", &n);
lm = << n;
for(int i = ; i < lm; i++) {
scanf("%lf", &p[i]);
w[i] = p[i];
if(i) {
cnt[i] = + cnt[i - (i & (-i))];
}
if(i > ) {
pw[i] = pw[i >> ] + ;
}
}
FWT_or(p, lm, );
for(int i = ; i < lm; i++) {
if(i != lm - && p[i] > - eps) {
puts("INF");
return ;
}
f[i] = 1.0 / ( - p[i]);
}
FWT_or(f, lm, -);
double ans = ;
for(int i = ; i < lm - ; i++) {
ans += f[i];
}
printf("%.10f\n", ans);
return ;
}
AC代码
第二种:Min-Max容斥。
设fs为把状态s的所有元素中至少一个变成1的期望次数。
同样是对步数0~∞求和,每次的概率是(没选到)i。最后Min-Max容斥统计答案。
#include <bits/stdc++.h> const int N = , M = ;
const double eps = 1e-; double f[M], p[M], w[M];
int cnt[M], pw[M], n, lm; inline void FWT_or(double *a, int n, int f) {
for(int len = ; len < n; len <<= ) {
for(int i = ; i < n; i += (len << )) {
for(int j = ; j < len; j++) {
a[i + len + j] += f * a[i + j];
}
}
}
return;
}
/*
2
0.25 0.25 0.25 0.25 */
int main() {
scanf("%d", &n);
lm = << n;
for(int i = ; i < lm; i++) {
scanf("%lf", &p[i]);
w[i] = p[i];
if(i) {
cnt[i] = + cnt[i - (i & (-i))];
}
if(i > ) {
pw[i] = pw[i >> ] + ;
}
}
FWT_or(p, lm, );
for(int i = ; i < lm; i++) {
if(i != lm - && p[i] > - eps) {
printf("INF\n");
return ;
}
//printf("p %d = %lf \n", i, p[i]);
f[i] = 1.0 / ( - p[(lm - ) ^ i]);
}
//FWT_or(f, lm, -1);
double ans = ;
for(int i = ; i < lm; i++) {
if(cnt[i] & ) ans += f[i];
else ans -= f[i];
}
printf("%.10f\n", ans);
return ;
}
AC代码
BZOJ4036 按位或的更多相关文章
- min-max容斥 hdu 4336 && [BZOJ4036] 按位或
题解: 之前听说过这个东西但没有学 令$max(S)$表示S中编号最大的元素,$min(S)$表示编号中最小的元素 $$max(S)=\sum{T \in S} {(-1)}^{|T|+1} min( ...
- Min-Max容斥及其推广和应用
概念 Min-Max容斥,又称最值反演,是一种对于特定集合,在已知最小值或最大值中的一者情况下,求另一者的算法. 例如: $$max(a,b)=a+b-min(a,b) \\\ max(a,b,c)= ...
- BZOJ4036 [HAOI2015]按位或 FWT
原文链接https://www.cnblogs.com/zhouzhendong/p/BZOJ4036.html 题目传送门 - BZOJ4036 题意 刚开始你有一个数字 $0$ ,每一秒钟你会随机 ...
- 【BZOJ4036】[HAOI2015]按位或 FWT
[BZOJ4036][HAOI2015]按位或 Description 刚开始你有一个数字0,每一秒钟你会随机选择一个[0,2^n-1]的数字,与你手上的数字进行或(c++,c的|,pascal的or ...
- 【BZOJ4036】按位或(Min-Max容斥,FWT)
[BZOJ4036]按位或(Min-Max容斥,FWT) 题面 BZOJ 洛谷 题解 很明显直接套用\(min-max\)容斥. 设\(E(max\{S\})\)表示\(S\)中最晚出现元素出现时间的 ...
- bzoj4036 / P3175 [HAOI2015]按位或
bzoj4036 / P3175 [HAOI2015]按位或 是一个 min-max容斥 的板子题. min-max容斥 式子: $ \displaystyle max(S) = \sum_{T\su ...
- BZOJ4036 HAOI2015按位或(概率期望+容斥原理)
考虑min-max容斥,改为求位集合内第一次有位变成1的期望时间.求出一次操作选择了S中的任意1的概率P[S],期望时间即为1/P[S]. 考虑怎么求P[S].P[S]=∑p[s] (s&S& ...
- BZOJ4036 [HAOI2015]按位或 【minmax容斥 + 期望 + FWT】
题目链接 BZOJ4036 题解 好套路的题啊,,, 我们要求的,实际上是一个集合\(n\)个\(1\)中最晚出现的\(1\)的期望时间 显然\(minmax\)容斥 \[E(max\{S\}) = ...
- 【bzoj4036】按位或
Portal --> bzoj4036 Solution 感觉容斥的东西内容有点qwq多啊qwq还是以题目的形式来慢慢补档好了 这里补的是min-max容斥 其实min-max容斥 ...
随机推荐
- Django数据库--事务及事务回滚
数据库的读写操作中,事务在保证数据的安全性和一致性方面起着关键的作用,而回滚正是这里面的核心操作.Django的ORM在事务方面也提供了不少的API.有事务出错的整体回滚操作,也有基于保存点的部分回滚 ...
- Android注解神器 ButterKnife框架
前言: 本人是一个只有几个月工作经验的码小渣.这是我写的第一篇博客,如有不足之处还请大家不要介意,还请大佬可以指出问题. 在这几个月的实战开发中自己也遇到了很多问题,真的是举步艰难啊!!! 在实战开发 ...
- whistle
whistle介绍 whistle是基于Node的跨平台web调试代理工具, 主要查看, 修改HTTP, HTTPS, Websocket的请求,响应, 也可以作为HTTP代理服务器使用 (文档)[h ...
- DICOM中检查时间 CT和增强CT、MR和增强MR
CT 的第一张到倒数第二张的时间0040,0002(ScheduledProcedureStepStartDate)DA:2008-10-27;0040,0003(ScheduledProcedure ...
- mssql sqlserver text数据类型专题说明
摘要: 下文分享text数据类型的简介及处理text数据类型所涉及的函数,如下所示: text 数据类型简介: mssql sqlserver 常用数据类型简介 mssql sqlserver tex ...
- pycharm设置自动换行的方法
只对当前文件有效的操作:菜单栏->View -> Active Editor -> Use Soft Wraps: 如果想对所有文件都有效,就要在setting里面进行操作:File ...
- Python面试笔记四
数据库 1.将name字段添加索引 create index index_emp_name on student(name); 2.查询女生中数学成绩最高的分数 select max(score) f ...
- .NET CORE学习笔记系列(2)——依赖注入【3】依赖注入模式
原文:https://www.cnblogs.com/artech/p/net-core-di-03.html IoC主要体现了这样一种设计思想:通过将一组通用流程的控制权从应用转移到框架中以实现对流 ...
- loc iloc函数的区别
import pandas as pd data1 = pd.read_excel(r"G:\Python\example1.xlsx") loc 用行列标签,iloc用数字索引. ...
- ORA-01578 data block corrupted 数据文件损坏 与 修复 (多为借鉴 linux)
好吧,先说说造成崩溃的原因: 使用redhat 5.9 Linux 作为数据库服务器, 周五数据库正在使用中,硬关机造成数据库文件部分损坏(周一上班时,应用程序启动不起来,查看日志文件时,发现一个数据 ...