题意:见大白书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复杂度毕竟是较高的,应当使用矩阵快速幂来直接递推。

最新文章

  1. Xamarin的不归路-ios模拟器没有键盘
  2. Javascript 事件对象(三)事件冒泡
  3. angularjs指令(二)
  4. session的一个问题
  5. 关于Java FTP SFTP的相关实际问题
  6. caffe的Matlab接口安装
  7. 2017ecjtu-summer training #5 UVA10382
  8. Day11 数据库的基本语法(偏重于查询)
  9. 0. VIM 系列 - 源码升级最新版本vim
  10. Shell命令-文件及目录操作之mkdir、mv
  11. 利用快排partition求前N小的元素
  12. MySQL--10MySQL图形化管理工具
  13. 【linux基础】使用命令行编译运行c++程序
  14. 如何快速学好Shell脚本?
  15. windows10+Python3.6+Anaconda3+tensorflow1.10.0配置和安装
  16. vm #set、日期截取、#foreach&amp;#if
  17. Discuz上传错误
  18. LINUX中的RCU机制的分析
  19. 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用
  20. 阿里八八“好记”——UML设计

热门文章

  1. python 练习:函数1
  2. Java Web 深入分析(8) Servlet工作原理解析
  3. C#通过地址获取省市区(基于百度地图API)
  4. opencv中自适应阈值函数的实现(c++)
  5. IOC实现-Unity
  6. mysql 添加省市编码表
  7. Jmeter测试出现端口占用情况
  8. VUE CLI3 less 全局变量引用
  9. 7.Redis的发布订阅
  10. ASE19团队项目beta阶段Backend组 scrum7 记录