学习一波用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 矩形粉刷的更多相关文章

  1. bzoj2969 矩形粉刷 概率期望

    此题在bzoj是权限题,,,所以放另一个oj的链接 题解: 因为期望线性可加,所以可以对每个方格单独考虑贡献.每个方格的贡献就为至少被粉刷过一次的概率×1(每个格子的最大贡献就是1...)每个方格至少 ...

  2. bzoj2969矩形粉刷

    题解: 和前面那个序列的几乎一样 容斥之后变成求不覆盖的 然后再像差分的矩形那样 由于是随便取的所以这里不用处理前缀和直接求也可以 代码: #include <bits/stdc++.h> ...

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

    [BZOJ2969]矩形粉刷 Description 为了庆祝新的一年到来,小M决定要粉刷一个大木板.大木板实际上是一个W*H的方阵.小M得到了一个神奇的工具,这个工具只需要指定方阵中两个格子,就可以 ...

  4. 【bzoj2969】矩形粉刷 期望

    题目描述 为了庆祝新的一年到来,小M决定要粉刷一个大木板.大木板实际上是一个W*H的方阵.小M得到了一个神奇的工具,这个工具只需要指定方阵中两个格子,就可以把这两格子为对角的,平行于木板边界的一个子矩 ...

  5. bzoj 2969: 矩形粉刷 概率期望

    题目: 为了庆祝新的一年到来,小M决定要粉刷一个大木板.大木板实际上是一个W*H的方阵.小M得到了一个神奇的工具,这个工具只需要指定方阵中两个格子,就可以把这两格子为对角的,平行于木板边界的一个子矩形 ...

  6. BZOJ 2969: 矩形粉刷(期望)

    BZOJ 2969: 矩形粉刷(期望) 题意: 给你一个\(w*h\)的方阵,不断在上面刷格子.每次等概率选择方阵中的两个点(可以相同)将以这两个点为端点的矩形(边平行于矩形边界)进行染色.共染\(k ...

  7. bzoj 2969: 矩形粉刷 概率期望+快速幂

    还是老套路:期望图上的格子数=$\sum$ 每个格子被涂上的期望=$\sum$1-格子不被图上的概率 这样的话就相对好算了. 那么,对于 $(i,j)$ 来说,讨论一下上,下,左,右即可. 然后发现四 ...

  8. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  9. [BOT] 一种android中实现“圆角矩形”的方法

    内容简介 文章介绍ImageView(方法也可以应用到其它View)圆角矩形(包括圆形)的一种实现方式,四个角可以分别指定为圆角.思路是利用"Xfermode + Path"来进行 ...

随机推荐

  1. ES6标准入门 第一章:简介

    ECMAScript 6 是JavaScript 语言的下一代标准:发布于2015年,又称为ECMAScript 2015. ECMAScript 与 JavaScript 的关系:前者是后者的规范, ...

  2. python爬虫(7)——BeautifulSoup

    今天介绍一个非常好用的python爬虫库--beautifulsoup4.beautifulsoup4的中文文档参考网址是:http://beautifulsoup.readthedocs.io/zh ...

  3. MAC下secretCRT使用技巧(转)

    1.打开secureCRT,按alt+b,可以调出快速启动栏,我相信secureCRT的忠实用户,都会保存一堆的sessions.2.按ctrl,可以同时选中多个session,再点击连接,可快速连接 ...

  4. 织梦默认编辑器 按下回车生成br标签改为生成p标签

    找到文件 \include\ckeditor\config.js 把 config.enterMode = CKEDITOR.ENTER_BR; config.shiftEnterMode = CKE ...

  5. 【实用】需要收藏备用的JQuery代码片段

    1 元素屏幕居中 jQuery.fn.center = function () { this.css("position","absolute"); this. ...

  6. 箱型图boxplot函数的使用

    主要参数: medlwd:设置中位线宽度 whiskcol:设置虚线颜色 staplecol:设置顶端颜色 outcol:离群值颜色 相应的具体位置: outline=FALSE:去除离群值 outp ...

  7. Sublime Text编辑远程Linux服务器上的文件

    sublime有个叫sftp的插件,可以通过它直接打开远程机器上的文件进行编辑,并在保存后直接同步到远程linux服务器上. 用Package Control安装插件 按下Ctrl+Shift+P调出 ...

  8. Android 如何进行页面传递对象

    当我们从一个页面调到另一个页面的时候,需要把该页面的一些设定值也传递给下一个页面.当要传递的值很多时,我们可以传递一个对象. 页面1: Intent intent = new Intent(PageO ...

  9. 【Learning】最小点覆盖(二分图匹配) 与Konig定理证明

    (附一道例题) Time Limit: 1000 ms   Memory Limit: 128 MB Description 最小点覆盖是指在二分图中,用最小的点集覆盖所有的边.当然,一个二分图的最小 ...

  10. HADOOP集群配置

    http://wenku.baidu.com/view/92cbe435eefdc8d376ee32eb.html http://www.infoq.com/cn/articles/hadoop-co ...