cf912D
题意简述:往n*m的网格中放k条鱼,一个网格最多放一条鱼,然后用一个r*r的网随机去捞鱼,问怎么怎么放鱼能使得捞鱼的期望最大,输出这个期望
题解:肯定优先往中间放,这里k不大,因此有别的简单方法,否则推公式各种情况烦死人,我们对于每一行来说将中间的数加进去,然后用set来维护k次就好了
#include<bits/stdc++.h>
#define forn(i, n) for (int i = 0 ; i < int(n) ; i++)
#define fore(i, s, t) for (int i = s ; i < (int)t ; i++)
#define fi first
#define se second
#define all(x) x.begin(),x.end()
#define pf2(x,y) printf("%d %d\n",x,y)
#define pf(x) printf("%d\n",x)
#define each(x) for(auto it:x) cout<<it<<endl;
#define pii pair<int,int>
using namespace std;
typedef long long ll;
const int maxn=2e5+5;
const int maxm=2e5+5;
const int inf=1e9;
int n,m,r,k;
struct cell{
int x,y,d;
ll val;
cell(int x,int y,int d):x(x),y(y),d(d){
val=(min(m+1,y+r)-max(y,r))*1ll*(min(n+1,x+r)-max(x,r));
}
bool operator<(const cell& rhs)const {
return val>rhs.val;
}
};
multiset<cell> ms;
double calc(){
for (int i = 1; i <= n; i++) {
int j = m / 2;
ms.insert({ i, j, 0 });
ms.insert({ i, j + 1, 1 });
}
ll total = 0;
for(int i=0;i<k;i++){
auto it = *ms.begin();
total += it.val;
ms.erase(ms.begin());
if (it.d == 1 && it.y < m)
ms.insert({ it.x, it.y + 1, 1 });
else if (it.d == 0 && it.y > 1)
ms.insert({ it.x, it.y - 1, 0 });
}
return (double)total / ((n - r + 1) * 1LL * (m - r + 1));
}
int main(){
cin>>n>>m>>r>>k;
if(n>m) swap(n,m);
if(m==1) {
printf("%.10f\n",1.0);
}
else {
printf("%.10f\n",calc());
}
}
cf912D的更多相关文章
- CF912D Fishes 期望 + 贪心
有趣的水题 由期望的线性性质,全局期望 = 每个格子的期望之和 由于权值一样,我们优先选概率大的点就好了 用一些数据结构来维护就好了 复杂度$O(k \log n)$ #include <set ...
- 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
题目链接:http://codeforces.com/contest/912/problem/D 题目大意: 在一个\(n \times m\)的网格中放鱼(每个网格只能放一条鱼),用一个\(r \t ...
- cf期望概率专题
cf1009E:求到第i段期望和的比较困难,但是单独求每段的期望是比较容易的,所以单独对每段求和,然后累计总和 E[i]=1/2*a1+1/4*a2+...+1/2^(i-1)*ai-1+1/2^(i ...
随机推荐
- linux--->配置lamp环境(centos7 最小版)
这篇博客写的很全,按照顺序敲代码即可 参考:https://www.cnblogs.com/me80/p/7218883.html
- V8垃圾回收?看这篇就够了!
什么是内存管理 内存管理是控制和协调应用程序访问电脑内存的过程.这个过程是复杂的,对于我们来说,可以说相当于一个黑匣子. 当咱们的应用程序运行在某个操作系统中的时候,它访问电脑内存(RAM)来达成下列 ...
- 腾讯云ubuntu服务器无法以root身份ssh连接
在腾讯云上拿到的Ubuntu主机分配给的用户是ubuntu用户,并不是root用户,而阿里云上拿到的Ubuntu主机分配给的用户就是root用户.如果没有root用户权限做事情会变得麻烦,每次做什么都 ...
- Maven debug异常:Source not found.
异常 用Maven debug 时出现了Source not found.,在调试过程中尝试添加源码也没有效果 解决方案 先把当前正在运行中的项目停止 右键项目 -> Debug As -> ...
- Docker快速上手之部署SpringBoot项目
Docker是基于Go语言实现的云开源项目. Docker的主要目标是“Build,Ship and Run Any App,Anywhere”,也就是通过对应用组件的封装.分发.部署.运行等生命周期 ...
- OpenCV3入门(二)Mat操作
1.Mat结构 1.1.Mat数据 Mat本质上是由两个数据部分组成的类: 矩阵头:包含信息有矩阵的大小,用于存储的方法,矩阵存储的地址等 数据矩阵指针:指向包含了像素值的矩阵. 矩阵头部的大小是恒定 ...
- 宅在家学不进去吗?试试这些 GitHub 上简单易学的游戏项目吧
作者:HelloGitHub-小鱼干 这是本人宅在家里的第 4 周,代码不想看,技术文章不想读,都不能愉快学习了我还怎么当一个优秀的需求消化师呢?有没有什么轻松地方法来学习技术呢?想起了小时候金山打字 ...
- 机器学习(ML)十之CNN
CNN-二维卷积层 卷积神经网络(convolutional neural network)是含有卷积层(convolutional layer)的神经网络.卷积神经网络均使用最常见的二维卷积层.它有 ...
- OOP(面向对象编程)
原文链接:https://blog.csdn.net/qq_38526635/article/details/81319127OOP编程思想OOP核心思想:封装,继承,多态. 理解: 对象是由数据和容 ...
- Centos7.6安装zabbix留纪录
1)查看系统版本 [root@zabbix-s41 ~]# cat /etc/redhat-release CentOS Linux release (Core) [root@zabbix-s41 ~ ...