bzoj2969: 矩形粉刷 期望&&概率

点击打开链接

Description

为了庆祝新的一年到来,小M决定要粉刷一个大木板。大木板实际上是一个W*H的方阵。小M得到了一个神奇的工具,这个工具只需要指定方阵中两个格子,就可以把这两格子为对角的,平行于木板边界的一个子矩形全部刷好。小M乐坏了,于是开始胡乱地使用这个工具。
假设小M每次选的两个格子都是完全随机的(方阵中每个格子被选中的概率是相等的),而且小M使用了K次工具,求木板上被小M粉刷过的格子个数的期望值是多少。

100% 的数据满足:1 ≤ W, H ≤ 1000, 0 ≤ K ≤ 100

题解:思路,每个位置分别计算被染色期望, 然后正难则反,统计不被粉刷期望

关键:两次补集转化。

         单次粉刷仍然算被刷的期望P=1-(1 - p) ^ k

注意算面积时边界被算两遍,还有选两次(x,y),只有一种情况,其他*2

#include<bits/stdc++.h>
using namespace std;
#define sqr(x) ((x)*(x))

double ans,all,k,w,h;

inline double power(double x,int y){
	double res = 1;
	while ( y ){
		if ( y & 1 ) res = res * x;
		x = x * x;
		y >>= 1;
	}
	return res;
}
int main(){
	cin>>k>>w>>h;
	all = sqr((double)w * h);
	for (int i = 1 ; i <= w ; i++) for(int j = 1 ; j <= h ; j++){
		double cur = 2.0 * i * j * (w - i + 1) * (h - j + 1);
		cur -= j * (h - j + 1) + i * (w - i + 1);
		cur = cur * 2 + 1;
		ans += 1 - power(1 - cur / all,k);
	}
	printf("%lld\n",(long long)round(ans));
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_42484877/article/details/80959934
今日推荐