bzoj4036 [HAOI2015]按位或
时间:2020-04-26
本文章向大家介绍bzoj4036 [HAOI2015]按位或,主要包括bzoj4036 [HAOI2015]按位或使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
solution
用\(f[i][j]\)表示第\(i\)次操作后手上数字为\(j\)的概率。
那么就有\(f[i][j]=\sum\limits_{s_1|s_2=j}f[i - 1][s_1]\times p[s_2]\)
所以第\(k\)次操作后手上数字为\(i\)的概率就是\(p^k_i\)。这里的乘法是集合并卷积。
仍然没有卵用。我们用\(FWT\)将它转化为点值。
那么第\(k\)次操作后手上数字为\(i\)的概率就是\(p_i'^k\)。这里的乘法就是简单的数乘。
那么手上数组变为\(i\)的期望次数就是,答案就是\(\sum\limits_{t=1}^{\infty}t (p_i^k-p_i^{k-1})=-(1+p_i+p_i^2+p_i^3+\cdots)=\frac{1}{x-1}\)
然后在用\(IFWT\)转化回去即可。
code
/*
* @Author: wxyww
* @Date: 2020-04-26 08:51:04
* @Last Modified time: 2020-04-26 09:10:07
*/
#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<queue>
#include<vector>
#include<ctime>
using namespace std;
typedef long long ll;
const int N = 1 << 21;
ll read() {
ll x = 0,f = 1;char c = getchar();
while(c < '0' || c > '9') {
if(c == '-') f = -1; c = getchar();
}
while(c >= '0' && c <= '9') {
x = x * 10 + c - '0'; c = getchar();
}
return x * f;
}
double a[N];
int main() {
int n = read();
for(int i = 0;i < (1 << n);++i)
scanf("%lf",&a[i]);
for(int i = 0;i < n;++i)
for(int j = 0;j < (1 << n);++j)
if(!((j >> i) & 1))
a[j | (1 << i)] += a[j];
for(int i = 0;i < (1 << n);++i) {
if(a[i] - 1 >= -1e-8) {
if(i == (1 << n) - 1) a[i] = 0;
else {puts("INF");return 0;}
}
else a[i] = 1 / (a[i] - 1);
}
for(int i = 0;i < n;++i)
for(int j = 0;j < (1 << n);++j)
if(!((j >> i) & 1))
a[j | (1 << i)] -= a[j];
printf("%.10lf\n",a[(1 << n) - 1]);
return 0;
}
/*
2
0.25 0.25 0.25 0.25
*/
原文地址:https://www.cnblogs.com/wxyww/p/bzoj4036.html
- iOS block探究(一): 基础详解你要知道的block都在这里
- 在不动用sp_configure的情况下,如何 =》去掉列的自增长,并保留原数据
- iOS runtime探究(一): 从runtime开始理解面向对象的类到面向过程的结构体你要知道的runtime都在这里
- iOS runtime探究(二): 从runtime开始深入理解OC消息转发机制你要知道的runtime都在这里
- SpringMVC 启动流程及相关源码分析你要知道的SpringMVC启动流程和源码分析都在这里
- iOS runtime探究(四): 从runtiem开始实践Category添加属性与黑魔法method swizzling你要知道的runtime都在这里
- C# 复制PDF页面到另一个PDF文档
- Java8 Lambda表达式与Stream API (一):Lambda表达式你要知道的Java8 匿名内部类、函数式接口、lambda表达式与Stream API都在这里
- iOS runtime探究(五): 从runtime开始深入weak实现机理你要知道的runtime都在这里
- Java8 Lambda表达式与Stream API (二): Stream API的使用你要知道的Java8 匿名内部类、函数式接口、lambda表达式与Stream API都在这里
- Python Garbage Collection 与 Objective-C ARCPython GC 与 Objective-C ARC
- SpringMVC DispatcherServlet执行流程及源码分析你要知道的SpringMVC DispatcherServlet执行流程及源码分析都在这里
- iOS runtime探究(三): 从runtime开始理解OC的属性property你要知道的runtime都在这里
- jQuery选择器大全(48个代码片段+21幅图演示)1
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- vivo 悟空活动中台 - H5 活动加载优化
- PostgreSQL常用命令
- 实用!一键生成数据库文档,堪称数据库界的Swagger
- 布隆过滤器原理
- 缓存穿透了怎么办?
- Stata | 生成等差数列的几种方式
- 一致性算法 - Raft协议流程
- 5.16.2-如何制作ElasticSearch的Parcel和csd
- bash显示git分支
- 0793-5.16.2-如何迁移单个Zookeeper实例
- 来了来了!Docker安装及运行原理
- 学习 | Node.js 之定时任务
- HTML标记语言学习笔记
- 明知 | TypeScript 结合 egg.js 基本使用
- 入门 | egg.js 入门之egg-jwt