bzoj2969 矩形粉刷
学习一波用markdown写题解的姿势QAQ
题意
给你一个w*h的矩形网格,每次随机选择两个点,将以这两个点为顶点的矩形内部的所有小正方形染黑,问染了k次之后期望有多少个黑色格子.
分析
一开始看错题以为是求染黑所有格子的期望步数差点吓傻了...然后发现求的是染黑格子的期望个数,那么就可以无脑上期望的线性性了.
\(\text{某个格子对期望的贡献}\)
\(=\text{这个格子最后被染黑的概率}\)
\(=1-这个格子最后没被染黑的概率\)
\(=1-(染色一次时这个格子这个格子没有被染黑的概率)^k\)
那么单次染色无法染黑某个格子的概率只需要数一数总的选择方案数和包含这个格子的选择方案数即可.
注意包含这个格子的矩形和包含这个格子的选择方案不是一一对应的.
某个长宽均大于等于2的矩形对应4种选择的的方案
(可以选择左上-右下 或 左下-右上,每种选择方式又对应两种方案,因为选择的两个顶点是有顺序的,下面两种类似)
长宽有一个为1的矩形对应2种选择的方案
长宽均为1的矩形对应1种选择的方案
注意到关于矩形的中心点对称的位置算出来的结果是一样的,可以利用这个将复杂度降低到1/4,然而我还是比bz上的榜一慢三倍...榜一太神啦
#include<cstdio>
typedef long long ll;
typedef double ld;
ld qpow(ld a,int x){
ld ans=1;
for(;x;x>>=1,a=a*a){
if(x&1)ans=ans*a;
}
return ans;
}
int k,w,h;ll tot;
ld p(int x,int y){
long long sum=0;
int x1=x,x2=w-x+1,y1=y,y2=h-y+1;
sum=x1*1ll*y1*y2*x2*4-x1*x2*2-y1*y2*2+1;
//printf("%d %d %lld %lld\n",x,y,sum,tot);
return (tot-sum)/(ld)(tot);
}
int main(){
scanf("%d%d%d",&k,&w,&h);
ld ans=w*h;tot=w*1ll*w*1ll*h*1ll*h;
//printf("%.4f\n",(double)p(1,1));
int ww=w/2,hh=h/2;
for(int i=1;i<=ww;++i){
for(int j=1;j<=hh;++j){//printf("a%d %d\n",i,j);
ans-=qpow(p(i,j),k)*4;
}
}
if(h&1){
for(int i=1;i<=ww;++i){//printf("b%d %d\n",i,h/2+1);
ans-=qpow(p(i,h/2+1),k)*2;
}
}
if(w&1){
for(int j=1;j<=hh;++j){//printf("c%d %d\n",w/2+1,j);
ans-=qpow(p(w/2+1,j),k)*2;
}
}
if((h&1)&&(w&1)){//printf("d%d %d\n",w/2+1,h/2+1);
ans-=qpow(p(w/2+1,h/2+1),k);
}
printf("%.0f\n",(double)ans);
return 0;
}
bzoj2969 矩形粉刷的更多相关文章
- bzoj2969 矩形粉刷 概率期望
此题在bzoj是权限题,,,所以放另一个oj的链接 题解: 因为期望线性可加,所以可以对每个方格单独考虑贡献.每个方格的贡献就为至少被粉刷过一次的概率×1(每个格子的最大贡献就是1...)每个方格至少 ...
- bzoj2969矩形粉刷
题解: 和前面那个序列的几乎一样 容斥之后变成求不覆盖的 然后再像差分的矩形那样 由于是随便取的所以这里不用处理前缀和直接求也可以 代码: #include <bits/stdc++.h> ...
- 【BZOJ2969】矩形粉刷 概率+容斥
[BZOJ2969]矩形粉刷 Description 为了庆祝新的一年到来,小M决定要粉刷一个大木板.大木板实际上是一个W*H的方阵.小M得到了一个神奇的工具,这个工具只需要指定方阵中两个格子,就可以 ...
- 【bzoj2969】矩形粉刷 期望
题目描述 为了庆祝新的一年到来,小M决定要粉刷一个大木板.大木板实际上是一个W*H的方阵.小M得到了一个神奇的工具,这个工具只需要指定方阵中两个格子,就可以把这两格子为对角的,平行于木板边界的一个子矩 ...
- bzoj 2969: 矩形粉刷 概率期望
题目: 为了庆祝新的一年到来,小M决定要粉刷一个大木板.大木板实际上是一个W*H的方阵.小M得到了一个神奇的工具,这个工具只需要指定方阵中两个格子,就可以把这两格子为对角的,平行于木板边界的一个子矩形 ...
- BZOJ 2969: 矩形粉刷(期望)
BZOJ 2969: 矩形粉刷(期望) 题意: 给你一个\(w*h\)的方阵,不断在上面刷格子.每次等概率选择方阵中的两个点(可以相同)将以这两个点为端点的矩形(边平行于矩形边界)进行染色.共染\(k ...
- bzoj 2969: 矩形粉刷 概率期望+快速幂
还是老套路:期望图上的格子数=$\sum$ 每个格子被涂上的期望=$\sum$1-格子不被图上的概率 这样的话就相对好算了. 那么,对于 $(i,j)$ 来说,讨论一下上,下,左,右即可. 然后发现四 ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- [BOT] 一种android中实现“圆角矩形”的方法
内容简介 文章介绍ImageView(方法也可以应用到其它View)圆角矩形(包括圆形)的一种实现方式,四个角可以分别指定为圆角.思路是利用"Xfermode + Path"来进行 ...
随机推荐
- CentOS 7 安装Maven
Maven的下载地址是:http://maven.apache.org/download.cgi 安装Maven非常简单,只需要将下载的压缩文件解压就可以了. cd /data wget http:/ ...
- shell编程值之正则表达式与字符截取(6)
正则表达式与通配符 正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配.grep.awk.sed等命令可以支持正则表达式 通配符用来匹配符合条件的文件名,通配符是完全匹配.ls.find.cp ...
- Zabbix 3.0 监控Web
zabbix 界面配置 触发器添加
- 机器学习03:K近邻算法
本文来自同步博客. P.S. 不知道怎么显示数学公式以及排版文章.所以如果觉得文章下面格式乱的话请自行跳转到上述链接.后续我将不再对数学公式进行截图,毕竟行内公式截图的话排版会很乱.看原博客地址会有更 ...
- python并发编程之多进程(一):进程开启方式&多进程
一,进程的开启方式 利用模块开启进程 from multiprocessing import Process import time,random import os def piao(name): ...
- 微信开发系列——微信订阅号前端开发利器:WeUI
前言:年前的两个星期,学习了下微信公众号的开发.后端基本能够基于盛派的第三方sdk能搞定大部分事宜.剩下的就是前端了,关于手机端的浏览器的兼容性,一直是博主的一块心病,因为博主一直专注于bootstr ...
- 在项目中遇到关于 CSS Overflow Hidden在iPhone & Safari不起作用
调试了半天 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <m ...
- 使用maven搭建hibernate的pom文件配置
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...
- 关于springMVC中component-scan的问题以及springmvc.xml整理
关于springMVC中component-scan的问题以及springmvc.xml整理 一.component-scan问题和解决办法 最近在学习使用springMVC+myba ...
- 《设计模式之禅》--MVC框架
需求:设计一个MVC框架 (以下可能摘要不全,后期整理) 架构图: * 核心控制器:MVC框架入口,负责接收和反馈HTTP请求 * 过滤器:Servlet容器内的过滤器,实现对数据的过滤处理 * 拦截 ...