题目链接 Fishes

题意  在一个$n*m$的矩阵中,随机选择一个$r * r$的区域覆盖。

一开始我们可以在这个$n*m$的矩阵中选择$k$个点标记为$1$。

我们要选择一个最佳的标记策略,使得覆盖这个$r * r$的区域之后,被覆盖的$1$的个数的期望值最大。

求这个期望值。

$1 <= n, m <= 10^{5}, 1 <= k <= min(n*m, 10^{5})$

太笨了,比赛的时候并没有做出这道题

否则大概可以好好上一波分了?

结果只是勉强回到紫名

首先我们要推出若某个点$(x, y)$被标记为$1$了,那么这个点被覆盖的期望值。

我们所要做的,就是选出所有$n*m$的点中期望值前$k$大的并累加。

首先计算点$(x, y)$被标记的话这个点被覆盖的期望值。

inline double solve(int x, int y){
double x1 = min(1.00 * x, n - x + 1.00); x1 = min(x1, n - 1.00 * r + 1); x1 = min(x1, 1.00 * r);
double y1 = min(1.00 * y, m - y + 1.00); y1 = min(y1, m - 1.00 * r + 1); y1 = min(y1, 1.00 * r);
return x1 * y1 / 1.00 / (n - r + 1) / (m - r + 1);
}

然后我们找一个显然是所有点中期望最大的点$(r, r)$,把他塞入优先队列。

因为期望是从中间往旁边递减,那么把这个点弹出来之后,把他周围的$4$个点再扔进去。

经过$k$次操作之后就得到了答案。

#include <bits/stdc++.h>

using namespace std;

#define rep(i, a, b)	for (int i(a); i <= (b); ++i)
#define dec(i, a, b) for (int i(a); i >= (b); --i)
#define MP make_pair const int dx[] = {1, 0, -1, 0};
const int dy[] = {0, 1, 0, -1}; struct node{
int x, y;
double z;
friend bool operator < (const node &a, const node &b){
return a.z < b.z;
}
}; int n, m, r, k;
double ans = 0;
priority_queue <node> q;
map <pair <int, int>, int> mp; inline bool check(int x, int y){
return x >= 1 && x <= n && y >= 1 && y <= m && mp.count(MP(x, y)) == 0;
} inline double solve(int x, int y){
double x1 = min(1.00 * x, n - x + 1.00); x1 = min(x1, n - 1.00 * r + 1); x1 = min(x1, 1.00 * r);
double y1 = min(1.00 * y, m - y + 1.00); y1 = min(y1, m - 1.00 * r + 1); y1 = min(y1, 1.00 * r);
return x1 * y1 / 1.00 / (n - r + 1) / (m - r + 1);
} int main(){ cin >> n >> m >> r >> k;
q.push({r, r, solve(r, r)});
mp[MP(r, r)] = 1; while (k--){
node now = q.top();
int x = now.x, y = now.y;
double z = now.z;
ans += z;
q.pop();
rep(i, 0, 3){
int nx = x + dx[i];
int ny = y + dy[i];
if (check(nx, ny)){
mp[MP(nx, ny)] = 1;
q.push({nx, ny, solve(nx, ny)});
}
}
} printf("%.12f\n", ans);
return 0;
}

Codeforces 912D Fishes (概率&期望,优先队列的应用)的更多相关文章

  1. CodeForces 912d fishes(优先队列+期望)

    While Grisha was celebrating New Year with Ded Moroz, Misha gifted Sasha a small rectangular pond of ...

  2. Codeforces 912D Fishs ( 贪心 && 概率期望 && 优先队列 )

    题意 : 给出一个 N * M 的网格,然后给你 K 条鱼给你放置,现有规格为 r * r 的渔网,问你如果渔网随意放置去捕捞小鱼的情况下,捕到的最大期望值是多少? 分析 :  有一个很直观的想法就是 ...

  3. Codeforces 912D - Fishes

    传送门:http://codeforces.com/contest/912/problem/D 本题是一个概率问题——求数学期望. 在一个n×m的方格中,有k个“*”.每个格子里可能有0~1个“*”. ...

  4. CodeForces 621C 数学概率期望计算

    昨天训练赛的题..比划了好久才想出来什么意思 之前想的是暴力for循环求出来然后储存数组 后来又想了想 自己萌的可以.. 思路就是求出来每个人与他的右边的人在一起能拿钱的概率(V(或)的关系)然后*2 ...

  5. Codeforces - 1264C - Beautiful Mirrors with queries - 概率期望dp

    一道挺难的概率期望dp,花了很长时间才学会div2的E怎么做,但这道题是另一种设法. https://codeforces.com/contest/1264/problem/C 要设为 \(dp_i\ ...

  6. 【BZOJ-1419】Red is good 概率期望DP

    1419: Red is good Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 660  Solved: 257[Submit][Status][Di ...

  7. uvalive 7331 Hovering Hornet 半平面交+概率期望

    题意:一个骰子在一个人正方形内,蜜蜂在任意一个位置可以出现,问看到点数的期望. 思路:半平面交+概率期望 #include<cstdio> #include<cstring> ...

  8. OI队内测试一【数论概率期望】

    版权声明:未经本人允许,擅自转载,一旦发现将严肃处理,情节严重者,将追究法律责任! 序:代码部分待更[因为在家写博客,代码保存在机房] 测试分数:110 本应分数:160 改完分数:200 T1: 题 ...

  9. 2016 多校联赛7 Balls and Boxes(概率期望)

    Mr. Chopsticks is interested in random phenomena, and he conducts an experiment to study randomness. ...

随机推荐

  1. DFS:Tempter of the Bone (规定时间达到规定地点)

    解题心得: 1.注意审题,此题是在规定的时间达到规定的地点,不能早到也不能晚到.并不是最简单的dfs 2.在规定时间达到规定的地点有几个剪枝: 一.公式:所需的步骤 - x相差行 - y相差列 = 偶 ...

  2. #include "*.c"文件的妙用

    在看uCOS II V2.91版本源代码时,在ucos_ii.c源文件中发现下面的代码: #include <os_core.c> #include <os_flag.c> # ...

  3. easyui datagrid复选框控制单选

    使用easyui datagrid的时候,由于对数据表格操作太多,并且有单选和多选功能因此采用复选框.但是在单选的状态,使用CheckOnSelect和singleselect时发现,页面有明显延迟, ...

  4. 【Two Sum】cpp

    题目: Given an array of integers, find two numbers such that they add up to a specific target number. ...

  5. 静态文本框控件的美化CStatic

    VC通用控件都是灰色,当对程序界面进行美化时,使用通用控件就和美化后的程序界面不搭配,在VB,C#中,可以很方便的更改控件背景颜色,但在VC中就不能,需要我们自己来完善这方面的功能.我在这只简单的介绍 ...

  6. 使用hibernate建立mysql连接以及生成映射类和配置文件*.cfg.xml

    建立数据库连接 找到window—open perspective—myeclipse database explore空白出右键new注意 driver template 和driver class ...

  7. Jquery鼠标悬停按钮图标动态变化效果

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. Ubuntu系统设置中心不见了

    sudo apt-get install unity-control-center 执行安装上述即可 原因是因为在安装搜狗输入法的时候卸载了ibuts与系统控制中心

  9. swiper单屏滚动

    .swiper-slide { overflow: auto; } 1. 排除某些屏,不滚动 var startScroll, touchStart, touchCurrent; var aSlide ...

  10. 【01】iconfont的使用

    我之前因为项目用bootstrap比较多,所以使用font awesome字体图标比较多,后来接触到了iconfont,发现想要的什么图标都有,还可以自定义图标,非常强大!之前看了一波教程,觉得繁琐, ...