学习一波用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. 关于一些php规范

    <?php /** * 符合psr-1,2的编程实例 * * @author GreenForestQuan */ namespace Standard; // 顶部命名空间 // 空一行 us ...

  2. ADO.NET 对数据操作

    public static class SQLHelper { static string connString = ConfigurationManager.ConnectionStrings[&q ...

  3. js 前端图片压缩+ios图片角度旋转

    step1:读取选择的图片,并转为base64: function ImgToBase64 (e, fn) { // 图片方向角 //fn为传入的方法函数,在图片操作完成之后执行 var Orient ...

  4. 使用performance进行网页性能监控

    由于项目需要, 需要对网页的一些性能进行监控, 接触到了performance, window.performance 提供了一组精确的数据,经过简单的计算就能得出一些网页性能数据, 将这些数据存储为 ...

  5. iOS UIFont 字体名字大全

    Font Family: American TypewriterFont: AmericanTypewriterFont: AmericanTypewriter-Bold Font Family: A ...

  6. Android 文件下载三种基本方式

    一.自己封装URLConnection 连接请求类 public void downloadFile1() { try{ //下载路径,如果路径无效了,可换成你的下载路径 String url = & ...

  7. 【Unity3D技术文档翻译】第1.3篇 创建 AssetBundles

    上一章:[Unity3D技术文档翻译]第1.2篇 为打包 AssetBundles 准备资产 本章原文所在章节:[Unity Manual]→[Working in Unity]→[Advanced ...

  8. Fiddler使用简单介绍

     一,fiddler简介 1.1,什么是fiddler Fiddler是一个http协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的http通讯,设置断点,查看所有的"进出&qu ...

  9. thinkphp5判断移动或pc端访问并调用不同模板

    废话不多说,直接上代码 先修改\thinkphp\library\think\view\driver\Think.php文件 把 public function __construct($config ...

  10. 两种简单的方法Docker构建LANMP

    在初步入门学习Docker的过程中一步步了解了Docker容器在团队开发中所起到的作用,一边学习一边操作基本命令,当然到现在还处于一个擦边的入门阶段. 尝试一下用Docker构建一个集成开发环境. S ...