CF912D Fishes
题目链接:http://codeforces.com/contest/912/problem/D
题目大意:
在一个\(n \times m\)的网格中放鱼(每个网格只能放一条鱼),用一个\(r \times r\)的网随机地捕一次鱼,问如何放置鱼能使得捕到的鱼的期望值最大,求最大值。
知识点: 优先队列、概率与期望
解题思路:
要使捕到鱼的期望值最大,就应该往最有可能被渔网捞到的格子里放鱼。
\(P(某个格子被捞到)= N_1(渔网能捞到这个格子的放置方案数)/N_2(渔网总放置方案数),\)
\(N(渔网总放置方案数) = (n-r+1)\times(m-r+1)\)
而要求\(N_1\),我们可以先算出最左边一列和最上边一行的各个格子对应的\(N_1\),\(N_1(x,y) = N_1(x,0) \times N_1(0,y)\)。于是我们可以从最中间的格子开始(直觉告诉我们:最中间的格子总是最有可能被捞到),用一个优先队列维护,每次都往上下左右四个方向拓展,找出前 \(k\) 个最有可能被捞到的位置所对应的期望值,加起来所得到的总和即为答案。
AC代码:
#include <bits/stdc++.h> using namespace std;
const int maxn = 1e5+;
const int cx[]={,-,,},cy[]={,,,-}; int line[maxn],col[maxn];
struct node{
int x,y;
double z;
friend bool operator <(const node &a,const node &b){
return a.z<b.z;
}
};
map<pair<int,int>,int> vis;
priority_queue<node> q; int main(){
int n,m,r,k;
scanf("%d%d%d%d",&n,&m,&r,&k);
for(int i=;i<=(n+)/;i++){
if(i<=n-r+) line[i]=min(i,r);
else line[i]=line[i-];
}
for(int i=n,j=;i>(n+)/;i--,j++)
line[i]=line[j]; for(int i=;i<=(m+)/;i++){
if(i<=m-r+) col[i]=min(i,r);
else col[i]=col[i-];
}
for(int i=m,j=;i>(m+)/;i--,j++)
col[i]=col[j]; double tot=(double)(n-r+)*(m-r+),ans=0.0;
node now,next;
now.x=(n+)/,now.y=(m+)/;
now.z=(double)line[now.x]*col[now.y]/tot;
q.push(now);
vis[make_pair(now.x,now.y)]=;
while(k--){
now=q.top();
q.pop();
ans+=now.z;
for(int i=;i<;i++){
int nx=now.x+cx[i],ny=now.y+cy[i];
if(nx>&&nx<=n&&ny>&&ny<=m&&!vis[make_pair(nx,ny)]){
next.x=nx,next.y=ny,next.z=(double)line[next.x]*col[next.y]/tot;
q.push(next);
vis[make_pair(nx,ny)]=;
}
}
}
printf("%.10lf\n",ans); return ;
}
CF912D Fishes的更多相关文章
- CF912D Fishes 期望
题意翻译 Description 有一个长为nnn ,宽为mmm 的鱼缸,还有一个边长为rrr 的正方形渔网.你可以往鱼缸里放kkk 条鱼,问用渔网随机在浴缸里捞鱼的最大期望是多少.不懂什么是期望的自 ...
- [CF912D]Fishes - 求数学期望,乱搞
D. Fishes time limit per test 1 second memory limit per test 256 megabytes input standard input outp ...
- CF912D Fishes 期望 + 贪心
有趣的水题 由期望的线性性质,全局期望 = 每个格子的期望之和 由于权值一样,我们优先选概率大的点就好了 用一些数据结构来维护就好了 复杂度$O(k \log n)$ #include <set ...
- CodeForces 912d fishes(优先队列+期望)
While Grisha was celebrating New Year with Ded Moroz, Misha gifted Sasha a small rectangular pond of ...
- Codeforces 912 D. Fishes (贪心、bfs)
题目链接:Fishes 题意: 有一个n×m的鱼塘,有一张r×r的渔网,现在往池塘里面放k条鱼(每个格子只能放一条鱼), 现在撒网的地方是随机的(必须在池塘内),问能捕的鱼的期望值最大是多少? 题解: ...
- Codeforces 912D Fishes (概率&期望,优先队列的应用)
题目链接 Fishes 题意 在一个$n*m$的矩阵中,随机选择一个$r * r$的区域覆盖. 一开始我们可以在这个$n*m$的矩阵中选择$k$个点标记为$1$. 我们要选择一个最佳的标记策略,使得 ...
- Codeforces 912D - Fishes
传送门:http://codeforces.com/contest/912/problem/D 本题是一个概率问题——求数学期望. 在一个n×m的方格中,有k个“*”.每个格子里可能有0~1个“*”. ...
- Codeforces Round #456 (Div. 2) 912D D. Fishes
题: OvO http://codeforces.com/contest/912/problem/D 解: 枚举每一条鱼,每放一条鱼,必然放到最优的位置,而最优位置即使钓上的概率最大的位置,即最多的r ...
- cf912D
题意简述:往n*m的网格中放k条鱼,一个网格最多放一条鱼,然后用一个r*r的网随机去捞鱼,问怎么怎么放鱼能使得捞鱼的期望最大,输出这个期望 题解:肯定优先往中间放,这里k不大,因此有别的简单方法,否则 ...
随机推荐
- .net多线程归并排序
一.概述 在了解排序算法的同时,想到用多线程排序减少排序的时间,所以写了一个简单的示例,加深印象.下面是具体代码 二.内容 环境:vs2017,.net core 2.2 控制台程序. 运行时使用r ...
- 浅析 JS 中的作用域链
作用域链的形成 在 JS 中每个函数都有自己的执行环境,而每个执行环境都有一个与之对应的变量对象.例如: var a = 2 function fn () { var a = 1 console.lo ...
- 安装并使用pyecharts库
在cmd命令行中输入安装命令, pyecharts库的安装命令如下: pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyecharts ...
- Ubuntu下访问Windows中Postgresql
因为项目的原因,需要将Ubuntu中的一些信息记录到Windows中的Postgresql数据库中,查看网上信息,最后成功了,特地记录以下,需要以下步骤: (1)在Windows中Postgresql ...
- 控制台报错 [WDS] Disconnected!
Webpack 的 HMR 功能,是通过 WebSocket 实现的推送 JSON Patch,同时需要第三方库支持. 具体解决方案: 热加载(HMR)是 Webpack Dev Server 最强大 ...
- Android Studio快捷键动态演示
Android Studio出来很久了,大部分已经转过来了,相对于Eclipse又是毋庸置疑,更好的使用快捷键必定达到事半功倍的效果. 友情提示:某些电脑按F1-F12键需要先按住FN,比如我的Mac ...
- 在TX2上多线程读取视频帧进行caffe推理
参考文章:Multi-threaded Camera Caffe Inferencing TX2之多线程读取视频及深度学习推理 背景 一般在TX2上部署深度学习模型时,都是读取摄像头视频或者传入视频文 ...
- 一只简单的网络爬虫(基于linux C/C++)————守护进程
守护进程,也就是通常说的Daemon进程,是Linux中的后台服务进程.它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件.守护进程常常在系统引导装入时启动, ...
- RocketMQ-架构篇
RocketMQ-架构篇 1.Broker Broker是RocketMQ的服务端组件之一,所有消息存储在Broker上,所有的投递.消费请求也都由Broker进行处理.Broker是有状态的应用,本 ...
- Docker 快速安装Jenkins完美教程 (亲测采坑后详细步骤)
一.前言 有人问,为什么要用Jenkins,在一些中小型企业?我说下我以前开发的痛点,每次开发一个项目完成后,需要打包部署,可能没有专门的运维人员,只能开发人员去把项目打成一个war包,可能这个项目已 ...