Codeforces 912D Fishes (概率&期望,优先队列的应用)
题目链接 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 (概率&期望,优先队列的应用)的更多相关文章
- CodeForces 912d fishes(优先队列+期望)
While Grisha was celebrating New Year with Ded Moroz, Misha gifted Sasha a small rectangular pond of ...
- Codeforces 912D Fishs ( 贪心 && 概率期望 && 优先队列 )
题意 : 给出一个 N * M 的网格,然后给你 K 条鱼给你放置,现有规格为 r * r 的渔网,问你如果渔网随意放置去捕捞小鱼的情况下,捕到的最大期望值是多少? 分析 : 有一个很直观的想法就是 ...
- Codeforces 912D - Fishes
传送门:http://codeforces.com/contest/912/problem/D 本题是一个概率问题——求数学期望. 在一个n×m的方格中,有k个“*”.每个格子里可能有0~1个“*”. ...
- CodeForces 621C 数学概率期望计算
昨天训练赛的题..比划了好久才想出来什么意思 之前想的是暴力for循环求出来然后储存数组 后来又想了想 自己萌的可以.. 思路就是求出来每个人与他的右边的人在一起能拿钱的概率(V(或)的关系)然后*2 ...
- Codeforces - 1264C - Beautiful Mirrors with queries - 概率期望dp
一道挺难的概率期望dp,花了很长时间才学会div2的E怎么做,但这道题是另一种设法. https://codeforces.com/contest/1264/problem/C 要设为 \(dp_i\ ...
- 【BZOJ-1419】Red is good 概率期望DP
1419: Red is good Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 660 Solved: 257[Submit][Status][Di ...
- uvalive 7331 Hovering Hornet 半平面交+概率期望
题意:一个骰子在一个人正方形内,蜜蜂在任意一个位置可以出现,问看到点数的期望. 思路:半平面交+概率期望 #include<cstdio> #include<cstring> ...
- OI队内测试一【数论概率期望】
版权声明:未经本人允许,擅自转载,一旦发现将严肃处理,情节严重者,将追究法律责任! 序:代码部分待更[因为在家写博客,代码保存在机房] 测试分数:110 本应分数:160 改完分数:200 T1: 题 ...
- 2016 多校联赛7 Balls and Boxes(概率期望)
Mr. Chopsticks is interested in random phenomena, and he conducts an experiment to study randomness. ...
随机推荐
- Codeforces Round #459 (Div. 2)-A. Eleven
A. Eleven time limit per test1 second memory limit per test256 megabytes Problem Description Eleven ...
- CF 497 div 2 B
B. Turn the Rectangles time limit per test 2 seconds memory limit per test 256 megabytes input stand ...
- POJ 3370 Halloween treats(抽屉原理)
Halloween treats Every year there is the same problem at Halloween: Each neighbour is only willing t ...
- GSMM数据库设计小结
边写边结 1.新增,删除,修改在各自的DAL中进行,查,可以新建一个DAL,里面是需要的各个属性,跨表,不同表属性整合成一个对象(集合)返回,输出到用户界面.
- 洛谷P1067 多项式输出
题目链接:https://www.luogu.org/problemnew/show/P1067 这是一个纯模拟的小怪但是需要注意一些小细节: 1.首项为正没有+号. 2.所有项系数如果是一的话就省略 ...
- Asp.net自定义控件开发任我行(2)-TagPrefix标签
摘要 前面我们已经做了一个最简单的TextBox的马甲,此篇文章,我们来讲讲自定义控件的标签.大家可能看到了上一篇中拖放进来的代码是 <cc1:TextEdit ID="TextEdi ...
- 安卓手机关闭底部键盘灯的方法(htc G11亲测有效)
还在因为看电子书和看电影时键盘灯刺眼而苦恼吗?下面提供一个方法关闭键盘灯,让你轻松DIY! 1、手机必须先Root。使用RE管理器,按照这个路径,找到文件:brightness sys/devices ...
- POJ 2836:Rectangular Covering(状态压缩DP)
题目大意:在一个平面内有若干个点,要求用一些矩形覆盖它们,一个矩形至少覆盖两个点,可以相互重叠,求矩形最小总面积. 分析: 数据很小,很容易想到状压DP,我们把点是否被覆盖用0,1表示然后放在一起得到 ...
- WebGIS的开发方式
(转)摘抄自<基于WebGIS的校友资源管理系统的设计与实现>_陈刚
- 独木桥(bridge)
独木桥(bridge) 题目描述 Alice和Bob是好朋友,这天他们带了n个孩子一起走独木桥. 独木桥宽度很窄,不允许两个或两个以上的人并肩行走,所有人必须要前后一个接一个地通行. Bob给所有的孩 ...