UVA 11605 Lights inside a 3d Grid —— (概率和期望)
题意:见大白书P181。
分析:一个一个点的进行分析,取其期望然后求和即可。假设当前点在第一次中被选到的概率为p,f[i]表示进行k次以后该点亮的概率(在这里也可以理解为期望),g[i]表示k次后该点不亮的概率,那么联立:
1.f[1] = p;
2.f[i] + g[i] = 1.0;
3.f[i] = f[i-1] * (1-p) + g[i-1] * p;
上面三个式子都很好理解。然后借助一下高中推数列的方法,可以推得:f[i] = 1/2-1/2*(1-2*p)^i。
那么,我们该怎么求p呢。不妨把三维分解成三个一维,那么,一个维度(即线段)上求的方法如下:
假设这个维度的长度是len,总的可能种数是len*len(因为题目没规定A和B两点之间坐标的大小,因此反过来的情况也必须算上),同理可以计算得 到包含了这个点的线段总数,后者除以前者即可得到该维度下的p'。
然后三个维度的p'相乘即可得到p。
最后O(n^3)枚举点并累和即可解决该问题。
代码如下:
#include <stdio.h>
#include <algorithm>
#include <string.h>
#include <math.h>
using namespace std; int n,m,p,k;
// f表示某个点,该点被选到的概率为x,其经过k次以后能亮的概率
double f(double x)
{
return 0.5 - 0.5 * pow((-*x), k);
} // get表示分解后的某条轴上这个点被选到的概率
double get(int x,int len)
{
// -1 是因为两个点都在x这个位置这种情况被多算了一次
return (2.0*x*(len-x+) - ) / (1.0*len*len);
} int main()
{
int T;
scanf("%d",&T);
for(int kase=;kase<=T;kase++)
{
scanf("%d%d%d%d",&n,&m,&p,&k);
double ans = 0.0;
for(int i=;i<=n;i++)
{
double nn = get(i, n);
for(int j=;j<=m;j++)
{
double mm = get(j, m);
for(int z=;z<=p;z++)
{
ans += f(nn * mm * get(z, p));
}
}
}
printf("Case %d: %.15f\n",kase,ans);
}
return ;
}
值得注意的是,这题下k的范围是1e4,如果k更大例如1e9,那么就不能用数学方法直接算出表达式了,因为带个pow复杂度毕竟是较高的,应当使用矩阵快速幂来直接递推。
UVA 11605 Lights inside a 3d Grid —— (概率和期望)的更多相关文章
- uva 11605 - Lights inside a 3d Grid(概率)
option=com_onlinejudge&Itemid=8&page=show_problem&problem=2652" style=""& ...
- UVA 11605 Lights inside a 3d Grid
#include <iostream> #include <stdio.h> #include <cstring> #include <math.h> ...
- Lights inside a 3d Grid UVA - 11605(概率)
题意: 给出一个n * m * h的空间 每次任意选择两个点 使得在以这两个点连线为对角线的空间的点的值 取反 (初始为0) 求经过k次操作后最后有多少点的值为1 解析: 遇到坐标分维去看 把三 ...
- LightOJ1284 Lights inside 3D Grid (概率DP)
You are given a 3D grid, which has dimensions X, Y and Z. Each of the X x Y x Z cells contains a lig ...
- LightOJ 1284 - Lights inside 3D Grid 概率/期望/二项式定理
题意:给你一个长宽高为x,y,z的长方体,里面每个格子放了灯,再给你k次选取任意长方体形状的区块,对其内所有灯开或关操作,初始为关,问亮灯数量的期望值. 题解:首先考虑选取区块的概率,使某个灯在被选取 ...
- Lights inside 3D Grid LightOJ - 1284 (概率dp + 推导)
Lights inside 3D Grid LightOJ - 1284 题意: 在一个三维的空间,每个点都有一盏灯,开始全是关的, 现在每次随机选两个点,把两个点之间的全部点,开关都按一遍:问k次过 ...
- LightOJ - 1284 Lights inside 3D Grid (概率计算)
题面: You are given a 3D grid, which has dimensions X, Y and Z. Each of the X x Y x Z cells contains a ...
- LightOJ - 1284 Lights inside 3D Grid —— 期望
题目链接:https://vjudge.net/problem/LightOJ-1284 1284 - Lights inside 3D Grid PDF (English) Statistic ...
- 3D Grid Effect – 使用 CSS3 制作网格动画效果
今天我们想与大家分享一个小的动画概念.这个梦幻般的效果是在马库斯·埃克特的原型应用程序里发现的.实现的基本思路是对网格项目进行 3D 旋转,扩展成全屏,并呈现内容.我们试图模仿应用程序的行为,因此 ...
随机推荐
- 上传文件-layui+ashx
public void ProcessRequest (HttpContext context) { if (true) { context.Response.ContentType = " ...
- vue 集成 NEditor 富文本
下载NEditor 放在 vue 项目下面 public 文件中. 安装 vue-neditor-wrap 执行命令 npm install vue-neditor-wrap 代码使用 ...
- JS/js是什么?
JavaScript 是一种专为与网页交互而设计的脚本语言,由下列三个不同的部分组成: ECMAScript,由 ECMA-262 定义,提供核心语言功能; 文档对象模型(DOM),提供访问和操作网页 ...
- linux物理地址和虚拟地址定义
线性地址(Linear Address) 是逻辑地址到物理地址变换之间的中间层 如果启用了分页机制,那么线性地址可以再经过变换以产生一个物理地址:如果没有启用分页机制,那么线性地址直接就是物理地址 分 ...
- UITableView个人使用总结【前篇-增量加载】
UITableView现在边整边总结. 预计分两个部分,第一个部分主要是对UITableView本身属性的学习.第二个部分可能会是加上一个编辑按钮以及对列表的操作. 今天先学习第一部分. 第一部分,我 ...
- window service 批处理安装/卸载命令
开启服务 @echo.服务启动...... @echo off @sc create 服务名 binPath= "C:\Users\Administrator\Desktop\win32sr ...
- 【shell】shell基础
一.数据类型 1.shell变量 运行shell时,会同时存在三种变量: 1) 局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量. 2) 环 ...
- Atollic TrueSTUDIO编译选项-优化设置
最近在玩stm32f407,比较懒,就直接使用Atollic TrueSTUDIO,官方版本,还免费,但是编译后,一直感觉代码添加了优化,语句执行顺序和代码不一致,在线调试时,有些变量的数值被优化了, ...
- ubuntu系统---ubuntu16.04 + virtualenv + py2.7 + tf1.5.0 + keras2.2.4 + opencv2.4.9 +Numpy1.14
ubuntu16.04 + virtualenv + py2.7 + tf1.5.0 + keras2.2.4 + opencv2.4.9 +Numpy1.14 @https://www.liaoxu ...
- 牛客练习赛48 A· 小w的a+b问题 (贪心,构造,二进制)
牛客练习赛48 A· 小w的a+b问题 链接:https://ac.nowcoder.com/acm/contest/923/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C ...