【BZOJ2969】矩形粉刷 概率+容斥

【BZOJ2969】矩形粉刷

Description

为了庆祝新的一年到来,小M决定要粉刷一个大木板。大木板实际上是一个W*H的方阵。小M得到了一个神奇的工具,这个工具只需要指定方阵中两个格子,就可以把这两格子为对角的,平行于木板边界的一个子矩形全部刷好。小M乐坏了,于是开始胡乱地使用这个工具。

假设小M每次选的两个格子都是完全随机的(方阵中每个格子被选中的概率是相等的),而且小M使用了K次工具,求木板上被小M粉刷过的格子个数的期望值是多少。

Input

第一行是整数KWH

Output

一行,为答案,四舍五入保留到整数。

Sample Input

1 3 3

Sample Output

4
【样例解释】
准确答案约为3.57
【范围】
100% 的数据满足:1 ≤ W, H ≤ 1000, 0 ≤ K ≤ 100

题解:跟染色那题一样,由于期望可加,所以我们只需要统计每个点被刷到的概率。而每个点被刷到的概率=1-每个点没被刷到的概率,没被刷到的怎么算呢?维护个二位前缀和,然后容斥搞一搞就行了。

#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
typedef long long ll;
int K,W,H;
double ans;
double pm(double x,int y)
{
	double ret=1;
	while(y)
	{
		if(y&1)	ret=ret*x;
		x=x*x,y>>=1;
	}
	return ret;
}
inline ll c(ll x)
{
	return x*x;
}
int main()
{
	int i,j;
	scanf("%d%d%d",&K,&W,&H);
	for(i=1;i<=W;i++)
	{
		for(j=1;j<=H;j++)
		{
			ans+=pm((double)(c((i-1)*H)+c((j-1)*W)+c((W-i)*H)+c(W*(H-j))-c((i-1)*(j-1))-c((i-1)*(H-j))-c((W-i)*(j-1))-c((W-i)*(H-j)))/c(W*H),K);
		}
	}
	printf("%.0lf",W*H-ans);
	return 0;
}
时间: 2024-08-09 19:20:55

【BZOJ2969】矩形粉刷 概率+容斥的相关文章

「PKUWC2018」猎人杀(概率+容斥+分治NTT)

https://loj.ac/problem/2541 很有意思的一道题目. 直接去算这题话,因为分母会变,你会发现不管怎么样都要枚举顺序. 考虑把题目转换,变成分母不会变的,即对于一个已经删过的,我们不把它从分母中剔除,但是,每一次的选择需要一直选直到选了一个没有被删过的. 然后再考虑怎么计算,这时就可以容斥了: 1既然要最后删除,我们枚举一个集合S一定在它之后被删,其它的随意. 设\(sw\)为\(\sum_{i\in S}w[i]\),\(W=\sum_{i=1}^n w[i]\) 最后答

POJ 3695 Rectangles (矩形并 状压+容斥定理 好题)

Rectangles Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 3730   Accepted: 1082 Description You are developing a software for painting rectangles on the screen. The software supports drawing several rectangles and filling some of them w

jzoj5987. 【WC2019模拟2019.1.4】仙人掌毒题 (树链剖分+概率期望+容斥)

题面 题解 又一道全场切的题目我连题目都没看懂--细节真多-- 先考虑怎么维护仙人掌.在线可以用LCT,或者像我代码里先离线,并按时间求出一棵最小生成树(或者一个森林),然后树链剖分.如果一条边不是生成树上的边,它肯定会和树上\(u,v\)这条路径构成一个环,然后对于每条树边记录一下这条树边被覆盖过没有.如果\(u,v\)路径上有任何一条树边被覆盖过,那么就说明路径上有一条边已经在一个简单环中,这条非树边就不能加.否则就加上这条边并让这条路径上所有树边的覆盖次数加一 然后考虑期望连通块个数.首先

UOJ #214 合唱队形 (概率期望计数、DP、Min-Max容斥)

9个月的心头大恨终于切掉了!!!! 非常好的一道题,不知为何uoj上被点了70个差评. 题目链接: http://uoj.ac/problem/214 题目大意: 请自行阅读. 题解: 官方题解讲得相当清楚,这里补充一下自己的一些理解. 首先来看\(O(2^{n-m}\times poly(n,m))\)的做法. 一种理解方式是官方题解. 设\(s\)为总共的课程个数(\(n\)个字符串的总长度),\(p(S)\)表示结尾位置为集合\(S\)的串全部匹配一共需要完成多少个不同的课程.设\(f(t

hdu 5471(状压DP or 容斥)

想了最复杂的思路,用了最纠结的方法,花了最长的时间,蒙了一种规律然后莫名其妙的过了. MD 我也太淼了. 后面想了下用状压好像还是挺好写的,而且复杂度也不高.推出的这个容斥的规律也没完全想透我就CAO. Count the Grid Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 400    Accepted Submission(s)

HDU 4336 Card Collector (期望DP+状态压缩 或者 状态压缩+容斥)

题意:有N(1<=N<=20)张卡片,每包中含有这些卡片的概率,每包至多一张卡片,可能没有卡片.求需要买多少包才能拿到所以的N张卡片,求次数的期望. 析:期望DP,是很容易看出来的,然后由于得到每张卡片的状态不知道,所以用状态压缩,dp[i] 表示这个状态时,要全部收齐卡片的期望. 由于有可能是什么也没有,所以我们要特殊判断一下.然后就和剩下的就简单了. 另一个方法就是状态压缩+容斥,同样每个状态表示收集的状态,由于每张卡都是独立,所以,每个卡片的期望就是1.0/p,然后要做的就是要去重,既然

不容易系列之一(错排公式+容斥)

不容易系列之一 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 17475    Accepted Submission(s): 7284 Problem Description 大家常常感慨,要做好一件事情真的不容易,确实,失败比成功容易多了! 做好“一件”事情尚且不易,若想永远成功而总从不失败,那更是难上加难了,就像花钱总是比挣钱容

UVA 11123 - Counting Trapizoid(计数问题+容斥)

UVA 11123 - Counting Trapizoid 题目链接 题意:给定一些点,不重复,求出一共有几个梯形 思路:先把所有两点组成直线求出来,然后排序,斜率相同的C2n个,然后再扣除掉重叠的直线情况和长度相等情况(这样为平行四边形或矩形),由于扣除的时候会重复扣掉重叠和相等,所以在加回来,这是容斥原理. 代码: #include <stdio.h> #include <string.h> #include <math.h> #include <algor

uva 11123 - Counting Trapizoid(容斥+几何)

题目链接:uva 11123 - Counting Trapizoid 题目大意:给定若干个点,问有多少种梯形,不包括矩形,梯形的面积必须为正数.因为是点的集合,所以不会优重复的点. 解题思路:枚举两两点,求出该条直线,包括斜率k,偏移值c,以及长度l.已知梯形的性质,一对对边平行,也就是说一对平行但是不相等的边. 所以将所有线段按照斜率排序,假设对于某一斜率,有m条边,那么这m条边可以组成的含平行对边的四边形有C(2m),要求梯形还要减掉长度相同以及共线的情况,分别对应的是l相同和c相同,但是