博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 5245 2015 上海邀请赛(期望值 数学概率)
阅读量:5050 次
发布时间:2019-06-12

本文共 3664 字,大约阅读时间需要 12 分钟。

Joyful

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 1267    Accepted Submission(s): 555


Problem Description
Sakura has a very magical tool to paint walls. One day, kAc asked Sakura to paint a wall that looks like an 
M×N matrix. The wall has 
M×N squares in all. In the whole problem we denotes 
(x,y) to be the square at the 
x-th row, 
y-th column. Once Sakura has determined two squares 
(x1,y1) and 
(x2,y2), she can use the magical tool to paint all the squares in the sub-matrix which has the given two squares as corners.
However, Sakura is a very naughty girl, so she just randomly uses the tool for 
K times. More specifically, each time for Sakura to use that tool, she just randomly picks two squares from all the 
M×N squares, with equal probability. Now, kAc wants to know the expected number of squares that will be painted eventually.
 

Input
The first line contains an integer 
T(
T100), denoting the number of test cases.
For each test case, there is only one line, with three integers 
M,N and 
K.
It is guaranteed that 
1M,N500
1K20.
 

Output
For each test case, output ''Case #t:'' to represent the 
t-th case, and then output the expected number of squares that will be painted. Round to integers.
 

Sample Input
 
2 3 3 1 4 4 2
 

Sample Output
 
Case #1: 4 Case #2: 8
Hint
The precise answer in the first test case is about 3.56790123.
 

这个题 着实 上头,   随机取 两个值,  求期望值 ,完蛋 求期望 公式不会了0- 0   期望值 高中题 ╮(╯▽╰)╭ 

公式不会  又不是很理解  caodan  

看了网上大牛的解释, 好吧  

思路:

1 两层for 循环扫描 每一个 每一个概率相等 

2 求可以覆盖的区域

这个图  从大神那搞得,   以 5 为特例  求 覆盖5的 区域   根据分布原理  两个相乘

1. 第一个选择  1 区域 和则 第二个 右下 5-6-8-9 都可以

2 .第一个选择  9 区域 和则 第二个 左上 5-4-1-2 都可以

3. 第一个选择  7 区域 和则 第二个 右上 5-6-3-2 都可以

4 .第一个选择  3 区域 和则 第二个 左下 5-4-7-8都可以

5. 第一个选择  2 区域 和则 第二个 二三行 4-5-6-7-8-9 都可以

6 .第一个选择  4 区域 和则 第二个 二三列 2-5-8-9-6-3 都可以

7 .第一个选择  8 区域 和则 第二个 一二行 1-2-3-4-5-6 都可以

8. 第一个选择  6 区域 和 则 第二个 一二列 1-2-4-5-7-8都可以

9. 第一个选择  5 区域 则 第二个 任意个地方都可以 即 1-2-3-4-5-6-7-8-9 

因此 我们 只需要 按照上面的思路 求覆盖  (x,y) 这个点 9步 就可以

p=n*m;// 他自己 周围 8个方向都可以  即m*n;                    p+=(i-1)*(j-1)*(n-i+1)*(m-j+1);// 1  5-6-8-9                    p+=(i-1)*(m-j)*j*(n-i+1);//   3  4-5-7-8                    p+=(j-1)*(n-i)*i*(m-j+1);//  7  2-3-5-6                    p+=(n-i)*(m-j)*i*j;//  9   1-2-4-5                    p+=(i-1)*m*(n-i+1);// 正上  2  4-5-6-7-8-9                    p+=(m-j)*n*j;//正右  6   1-2-4-5-7-8                    p+=(n-i)*m*i;// 正下  8  1-2-3-4-5-6                    p+=(j-1)*n*(m-j+1);//正左 4  2-3-5-6-7-8
 

代码:

#include 
#include
#include
#include
using namespace std;typedef long long ll;int main(){ int T,i,j,k; double n,m;// n,m 要double 后面有p/(n*m*n*m) 防止误差 while(cin>>T) { int count=1; while(T--) { scanf("%lf %lf %d",&n,&m,&k); double p,ans=0; for(i=1;i<=n;i++) { for(j=1;j<=m;j++) { p=n*m;// 他自己 周围 8个方向都可以 即m*n; p+=(i-1)*(j-1)*(n-i+1)*(m-j+1);// 1 5-6-8-9 p+=(i-1)*(m-j)*j*(n-i+1);// 3 4-5-7-8 p+=(j-1)*(n-i)*i*(m-j+1);// 7 2-3-5-6 p+=(n-i)*(m-j)*i*j;// 9 1-2-4-5 p+=(i-1)*m*(n-i+1);// 正上 2 4-5-6-7-8-9 p+=(m-j)*n*j;//正右 6 1-2-4-5-7-8 p+=(n-i)*m*i;// 正下 8 1-2-3-4-5-6 p+=(j-1)*n*(m-j+1);//正左 4 2-3-5-6-7-8 p/=(n*n*m*m); ans+=1-(pow(1-p,k)); } } printf("Case #%d: %d\n",count++,int(ans+0.5)); } } return 0;}

转载于:https://www.cnblogs.com/sizaif/p/9078564.html

你可能感兴趣的文章
this详解与面向对象编程
查看>>
谈谈 C++ 中的右值引用
查看>>
树状数组之二维树状数组
查看>>
使用.NET身份验证防止不登录直接访问页面 .
查看>>
九度OJ 1156:谁是你的潜在朋友
查看>>
用户子查询,用case
查看>>
数组与集合List的相互转化
查看>>
Android—基于Socket与上传图片到客户端
查看>>
Docker安装MySQL并配置my.cnf
查看>>
ASSERT_VALID(pDoc)分析
查看>>
Java提高篇——equals()与hashCode()方法详解
查看>>
表单中用户输入"&lt"等转义字符,保存后数据库是原文保存的,但是查看的时候显示的是"<",如何是的&lt;字符在网页原样显示出来。...
查看>>
宗溯软件聚焦2012伦敦奥运会
查看>>
5 python字典dict的操作
查看>>
synchronized的实现原理及锁优化
查看>>
JMeter入门(2):一个简单实例
查看>>
夺命雷公狗---Smarty NO:17 html_table函数
查看>>
Yaf入门笔记
查看>>
基于int的Linux的经典系统调用实现
查看>>
cookie的使用
查看>>