博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 5245
阅读量:5309 次
发布时间:2019-06-14

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

 题目大意:

每次随机选择两个点,便把这两个点之间形成的子矩阵上的每一个方块涂色,问随机选择k次,整个m*n的矩阵中有多少个小方块被涂上了颜色

 

这道题不难,但自己智商实在捉急,一直想不出来。。。

因为这里n,m<=500,所以总共250000个方块,我们可以考虑的是每一个方块在随机选择1次后被染色的概率 p[i][j]

那么k次后就变成了 1-(1-p[i][j])^k的概率了,我们将所有概率相加就得到了总共的染色块数

至于怎么计算被染色概率就是可以将整个矩形块分解,然后去计算所有不能包括当前点的所有点对组合,求出不被染色的次数

总的次数n*m*n*m 会超int

1 #include 
2 #include
3 #include
4 #include
5 #include
6 using namespace std; 7 #define N 505 8 #define ll long long 9 double p[N][N];10 int n , m , k;11 //计算i,j位置的正方形小块不包含的取点总数12 ll cal(int i , int j)13 {14 ll c1 = i-1 , c2=(i-1)*(m-j) , c3=m-j , c4=(n-i)*(m-j);15 ll c5 = n-i , c6=(n-i)*(j-1) , c7=j-1 , c8=(i-1)*(j-1);16 ll ret = 0;17 ret+=c1*(c1+c2+c8)+c2*(c2+c1+c8+c3+c4)+c3*(c2+c3+c4)+c4*(c2+c3+c4+c5+c6)+c5*(c4+c5+c6)+c6*(c4+c5+c6+c7+c8)+c7*(c6+c7+c8)+c8*(c6+c7+c8+c1+c2);18 // if(ret<0 || ret>n*m*n*m) cout<
<<" "<
<<" "<
<
>=1;29 }30 return ret;31 }32 33 int main()34 {35 #ifndef ONLINE_JUDGE36 freopen("a.in" , "r" , stdin);37 #endif38 int T , cas=0;39 scanf("%d" , &T);40 while(T--)41 {42 scanf("%d%d%d" , &n , &m , &k);43 double ret = 0;44 ll all = (ll)n*m*n*m;45 // cout<
<
=1||p[i][j]<0) cout<
<<" "<
<<" "<
<

 

转载于:https://www.cnblogs.com/CSU3901130321/p/4550337.html

你可能感兴趣的文章
web数据采集核心技术分享系列(四)利用神经网络实现网页验证码破解
查看>>
js defineProperty 定义一个属性
查看>>
成长——新的开始,一切都是美好的
查看>>
hosts文件配置参数介绍
查看>>
林昊3
查看>>
system函数调用
查看>>
PHP AJAX上传文件
查看>>
Swift4.0复习扩展
查看>>
Swift编码总结6
查看>>
pic
查看>>
vim
查看>>
Oracle Inventory Management Application Program Interface ( APIs) (Doc ID 729998.1)
查看>>
hdu_1060_Leftmost Digit_201311071827-2
查看>>
移动前端—图片压缩上传实践
查看>>
Android:如何显示网络图片(转)
查看>>
JAVA和.NET开发过程中的一些不同
查看>>
微分方程数值解Euler法
查看>>
[快速幂]a^b
查看>>
基于流的自动化构建工具------gulp (简单配置)
查看>>
【基本优化实践】【1.3】最大内存参数限制
查看>>