HDU 5245 Joyful 经典概率题目推公式
2016-05-11 17:59
501 查看
公式题
别人的很详细的推理过程,复制过来做笔记。
题意大致是:进行K次染色,每次染色会随机选取一个以(x1,y1),(x2,y2)为一组对角的子矩阵进行染色,求K次染色后染色面积的期望值(四舍五入)。
[html] view
plain copy
样例1:(n,m,k)=(3,3,1)
Case #1: 4
(这组样例中,每一种可能染色方案的面积总和为289,染色的方案数共有n*n*m*m=3^4=81种,因此期望为3.56790123,四舍五入后答案为4)
当K=1时,期望被染色的面积会等于每个1*1的方块被染色的期望累加之和。
即n*m个小方格的期望值之和。
假设K=1时即只染色一次时,位于第x行第y列的小方块被染色的概率为A[x,y]
在K次操作后被染色的期望假设为P[x,y],可以用 (而不是p^k)
[html] view
plain copy
P[x,y]=1-(1-A[x,y])^k
来计算。
此时我们的问题转向了如何计算A[x.y]上
由题目描述,一次染色中可能的操作有n^2*m^2种 ((一共n*m个小方格)第一个方格有n*m中取法同理第二个也有n*m中)
计算A[x,y]时,我们可以把整个矩阵做如下拆分
当前计算的方块为[x,y],即图中编号为5的部分
将其他部分拆分成图上8个区域,则可得到以下关系
[html] view
plain copy
对于一种染色方案能够覆盖方块[x,y]时
①[x1,y1]取在区域1内时,[x2,y2]可以在5、6、8、9四个区域内任取;
②[x1,y1]取在区域2内时,[x2,y2]可以在4、5、6、7、8、9六个区域内任取;
③[x1,y1]取在区域3内时,[x2,y2]可以在4、5、7、8四个区域内任取;
④[x1,y1]取在区域4内时,[x2,y2]可以在2、3、5、6、8、9六个区域内任取;
⑤[x1,y1]取在区域5内时,[x2,y2]可以在所有区域内任取;
⑥[x1,y1]取在区域6内时,[x2,y2]可以在1、2、4、5、7、8六个区域内任取;
⑦[x1,y1]取在区域7内时,[x2,y2]可以在2、3、5、6四个区域内任取;
⑧[x1,y1]取在区域8内时,[x2,y2]可以在1、2、3、4、5、6六个区域内任取;
⑨[x1,y1]取在区域1内时,[x2,y2]可以在1、2、4、5四个区域内任取;
按照这个关系,即可推出A[x,y]的表达式。
P.S.:本题因为计算过程中会出现n^2*m^2大小的计算,因此需要注意int溢出的问题
别人的很详细的推理过程,复制过来做笔记。
题意大致是:进行K次染色,每次染色会随机选取一个以(x1,y1),(x2,y2)为一组对角的子矩阵进行染色,求K次染色后染色面积的期望值(四舍五入)。
[html] view
plain copy
样例1:(n,m,k)=(3,3,1)
Case #1: 4
(这组样例中,每一种可能染色方案的面积总和为289,染色的方案数共有n*n*m*m=3^4=81种,因此期望为3.56790123,四舍五入后答案为4)
当K=1时,期望被染色的面积会等于每个1*1的方块被染色的期望累加之和。
即n*m个小方格的期望值之和。
假设K=1时即只染色一次时,位于第x行第y列的小方块被染色的概率为A[x,y]
在K次操作后被染色的期望假设为P[x,y],可以用 (而不是p^k)
[html] view
plain copy
P[x,y]=1-(1-A[x,y])^k
来计算。
此时我们的问题转向了如何计算A[x.y]上
由题目描述,一次染色中可能的操作有n^2*m^2种 ((一共n*m个小方格)第一个方格有n*m中取法同理第二个也有n*m中)
计算A[x,y]时,我们可以把整个矩阵做如下拆分
当前计算的方块为[x,y],即图中编号为5的部分
将其他部分拆分成图上8个区域,则可得到以下关系
[html] view
plain copy
对于一种染色方案能够覆盖方块[x,y]时
①[x1,y1]取在区域1内时,[x2,y2]可以在5、6、8、9四个区域内任取;
②[x1,y1]取在区域2内时,[x2,y2]可以在4、5、6、7、8、9六个区域内任取;
③[x1,y1]取在区域3内时,[x2,y2]可以在4、5、7、8四个区域内任取;
④[x1,y1]取在区域4内时,[x2,y2]可以在2、3、5、6、8、9六个区域内任取;
⑤[x1,y1]取在区域5内时,[x2,y2]可以在所有区域内任取;
⑥[x1,y1]取在区域6内时,[x2,y2]可以在1、2、4、5、7、8六个区域内任取;
⑦[x1,y1]取在区域7内时,[x2,y2]可以在2、3、5、6四个区域内任取;
⑧[x1,y1]取在区域8内时,[x2,y2]可以在1、2、3、4、5、6六个区域内任取;
⑨[x1,y1]取在区域1内时,[x2,y2]可以在1、2、4、5四个区域内任取;
按照这个关系,即可推出A[x,y]的表达式。
P.S.:本题因为计算过程中会出现n^2*m^2大小的计算,因此需要注意int溢出的问题
#include<bits/stdc++.h> #define LL long long using namespace std; int main() { int t,k; long long n,m; scanf("%d",&t); for(int Case=1;Case<=t;Case++) { scanf("%lld%lld%d",&n,&m,&k); double sum=0; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { double p=n*m; p+=(i-1)*(j-1)*(n-i+1)*(m-j+1); p+=(i-1)*1*(n-i+1)*m; p+=(i-1)*(m-j)*(n-i+1)*j; p+=1*(j-1)*(m-j+1)*n; p+=1*(m-j)*n*j; p+=(n-i)*(j-1)*i*(m-j+1); p+=(n-i)*1*i*m; p+=(n-i)*(m-j)*i*j; p=p/n/n/m/m; sum+=1-pow(1-p,k); } } printf("Case #%d: %d\n",Case,int(sum+0.5)); } return 0; }
相关文章推荐
- 【C#设计模式-备忘录模式】
- 对cnblogs.com的用户体验
- 秒杀系统架构优化思路 | 哈巴狗
- Undefined symbols for architecture arm64:
- 异步get请求之代理方法
- moon 各种文件后缀名解释
- django 从get,post获取数据
- 如何修改eclipse中@author的默认选项
- 【转】ios 半透明模糊效果的实现
- 问题记录-如何让Listview子控件在点击之后失去点击事件
- 【Linux】虚拟机与物理主机互联
- Android TextView使用HTML处理字体样式、显示图片等
- Quartz Java resuming a job excecutes it many times--转
- [转] 数字签名是什么?
- 【网络编程】——connect函数遇见EINTR的处理
- html5随笔
- notifyDataSetChanged()数据不更新的问题
- 【C语言】单链表的相关热点面试题(包括:从尾到头打印,逆置,冒泡,寻找中间节点,倒数k节点)
- 分享10个优化代码的CSS和JavaScript工具
- poj 3468 A Simple Problem with Integers 插线问线