bzoj 2969: 矩形粉刷 概率期望
题目:
为了庆祝新的一年到来,小M决定要粉刷一个大木板。大木板实际上是一个W*H的方阵。小M得到了一个神奇的工具,这个工具只需要指定方阵中两个格子,就可以把这两格子为对角的,平行于木板边界的一个子矩形全部刷好。小M乐坏了,于是开始胡乱地使用这个工具。
假设小M每次选的两个格子都是完全随机的(方阵中每个格子被选中的概率是相等的),而且小M使用了K次工具,求木板上被小M粉刷过的格子个数的期望值是多少。
题解:
我们发现我们无法直接进行概率期望dp
因为状态无法记录.
而在这道题中被染色的格子的位置不同也决定着不同的状态.
所以我们考虑转化问题,我们可以分别计算出每个格子k次后被染成黑色的概率.
然后我们求概率之和即为期望.
所以我们把问题转化成了求概率。
因为我们要求的是一个格子k次操作后被染成黑色的概率,而每次操作是染色一个子矩阵.
直接不好计算,所以考虑补集转化.
我们统计每个点在k次操作后仍然没有被染成黑色的概率。然后用1减即可。
至于怎么计算k次操作后没有被染成黑色的概率,我们算出一次染色没有被染到的概率.
再求k次方既可.
一次染色没有被染到的概率瞎XX搞一下就好了.
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
inline void read(int &x){
x=0;char ch;bool flag = false;
while(ch=getchar(),ch<'!');if(ch == '-') ch=getchar(),flag = true;
while(x=10*x+ch-'0',ch=getchar(),ch>'!');if(flag) x=-x;
}
int n,m;
#define sqr(x) ((x)*(x))
inline double calc(int i,int j){
double upside = .0;
upside += sqr(1.0*n*(j-1)) + sqr(1.0*(i-1)*m);
upside += sqr(1.0*(n-i)*m) + sqr(1.0*n*(m-j));
upside -= sqr(1.0*(i-1)*(j-1)) + sqr(1.0*(n-i)*(m-j));
upside -= sqr(1.0*(i-1)*(m-j)) + sqr(1.0*(n-i)*(j-1));
double dnside = sqr(1.0*n*m);
return upside/dnside;
}
inline double qpow(double x,int p){
double ret = 1.0;
for(;p;p>>=1,x=x*x) if(p&1) ret=ret*x;
return ret;
}
int main(){
int T;T = 1;
while(T--){
int k;read(k);read(n);read(m);
double ans = .0;
for(int i=1;i<=n;++i){
for(int j=1;j<=m;++j){
ans += 1.0 - qpow(calc(i,j),k);
}
}
printf("%.0f\n",ans);
}
return 0;
}
bzoj 2969: 矩形粉刷 概率期望的更多相关文章
- bzoj 2969: 矩形粉刷 概率期望+快速幂
还是老套路:期望图上的格子数=$\sum$ 每个格子被涂上的期望=$\sum$1-格子不被图上的概率 这样的话就相对好算了. 那么,对于 $(i,j)$ 来说,讨论一下上,下,左,右即可. 然后发现四 ...
- BZOJ 2969: 矩形粉刷(期望)
BZOJ 2969: 矩形粉刷(期望) 题意: 给你一个\(w*h\)的方阵,不断在上面刷格子.每次等概率选择方阵中的两个点(可以相同)将以这两个点为端点的矩形(边平行于矩形边界)进行染色.共染\(k ...
- bzoj2969 矩形粉刷 概率期望
此题在bzoj是权限题,,,所以放另一个oj的链接 题解: 因为期望线性可加,所以可以对每个方格单独考虑贡献.每个方格的贡献就为至少被粉刷过一次的概率×1(每个格子的最大贡献就是1...)每个方格至少 ...
- 【BZOJ2969】矩形粉刷 概率+容斥
[BZOJ2969]矩形粉刷 Description 为了庆祝新的一年到来,小M决定要粉刷一个大木板.大木板实际上是一个W*H的方阵.小M得到了一个神奇的工具,这个工具只需要指定方阵中两个格子,就可以 ...
- bzoj 4832 抵制克苏恩 概率期望dp
考试时又翻车了..... 一定要及时调整自己的思路!!! 随从最多有7个,只有三种,所以把每一种随从多开一维 so:f[i][j][k][l]为到第i次攻击前,场上有j个1血,k个2血,l个3血随从的 ...
- bzoj 2510: 弱题 概率期望dp+循环矩阵
题目: Description 有M个球,一开始每个球均有一个初始标号,标号范围为1-N且为整数,标号为i的球有ai个,并保证Σai = M. 每次操作等概率取出一个球(即取出每个球的概率均为1/M) ...
- 【BZOJ-1419】Red is good 概率期望DP
1419: Red is good Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 660 Solved: 257[Submit][Status][Di ...
- uvalive 7331 Hovering Hornet 半平面交+概率期望
题意:一个骰子在一个人正方形内,蜜蜂在任意一个位置可以出现,问看到点数的期望. 思路:半平面交+概率期望 #include<cstdio> #include<cstring> ...
- OI队内测试一【数论概率期望】
版权声明:未经本人允许,擅自转载,一旦发现将严肃处理,情节严重者,将追究法律责任! 序:代码部分待更[因为在家写博客,代码保存在机房] 测试分数:110 本应分数:160 改完分数:200 T1: 题 ...
随机推荐
- 单向HASH——MurmurHash
//seed 是大质数unsigned long long MurmurHash64B ( const void * key, int len, unsigned int seed ) { const ...
- 一些blog地址总结整理:
女神 python之路-网络编程初版:https://www.cnblogs.com/Eva-J/articles/8066842.html python之路-网络编程(重点看这个,更细致):http ...
- iostat命令简单使用
1.iostat使用范围 iostat命令可以生成3种类型的报告: (1)CPU使用情况的报告 (2)设备使用情况的报告 (3)网络文件系统(NFS)使用情况的报告 2.每种报告的格式说明 关于CPU ...
- mac上好用的软件
1 newfile menu for Mac 右键创建文件.
- Image Recognition
https://www.tensorflow.org/tutorials/image_recognition
- l如何把SQLServer表数据导出CSV文件,并带列名
http://jingyan.baidu.com/article/4b07be3c466b5d48b280f37f.html 微信公众号:
- mysql练习(待补充)
2.查询‘生物’课程比‘物理’课程成绩高的所有学生的学号 思路: 获取所有生物课程的人(学号,成绩)-临时表 获取所有物理课程的人(学号,成绩)-临时表 根据学号连接两个临时表: 学号 生物成绩 物理 ...
- 3.09课·········for循环
for循环:反复执行某段代码.for循环四要素:初始条件,循环条件,循环体,状态改变.for(初始条件;循环条件;状态改变){ 循环体} 若初始条件满足循环条件,则进入循环体,执行完循环体,跳回到状态 ...
- HDU - 1176 免费馅饼 【DP】
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1176 思路 因为刚开始的起点是固定的 但是终点不是固定的 所以我们可以从终点往起点推 dp[i][j] ...
- session不能使用 ASP.NET MVC
在web.coonfig中添加 <sessionState mode=" /> 如: <system.web> //... <sessionState mode ...