博客
关于我
Codeforces Round #456 (Div. 2) D. Fishes
阅读量:530 次
发布时间:2019-03-08

本文共 2855 字,大约阅读时间需要 9 分钟。

D. Fishes
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output

While Grisha was celebrating New Year with Ded Moroz, Misha gifted Sasha a small rectangular pond of sizen × m, divided into cells of size1 × 1, inhabited by tiny evil fishes (no more than one fish per cell, otherwise they'll strife!).

The gift bundle also includes a square scoop of size r × r, designed for fishing. If the lower-left corner of the scoop-net is located at cell(x, y), all fishes inside the square(x, y)...(x + r - 1, y + r - 1) get caught. Note that the scoop-net should lie completely inside the pond when used.

Unfortunately, Sasha is not that skilled in fishing and hence throws the scoop randomly. In order to not frustrate Sasha, Misha decided to releasek fishes into the empty pond in such a way that the expected value of the number of caught fishes is as high as possible. Help Misha! In other words, putk fishes in the pond into distinct cells in such a way that when the scoop-net is placed into a random position among(n - r + 1)·(m - r + 1) possible positions, the average number of caught fishes is as high as possible.

Input

The only line contains four integers n, m, r, k (1 ≤ n, m ≤ 105,1 ≤ r ≤ min(n, m),1 ≤ k ≤ min(n·m, 105)).

Output

Print a single number — the maximum possible expected number of caught fishes.

You answer is considered correct, is its absolute or relative error does not exceed10 - 9. Namely, let your answer bea, and the jury's answer be b. Your answer is considered correct, if .

Examples
Input
3 3 2 3
Output
2.0000000000
Input
12 17 9 40
Output
32.8333333333
Note

In the first example you can put the fishes in cells (2, 1),(2, 2), (2, 3). In this case, for any of four possible positions of the scoop-net (highlighted with light green), the number of fishes inside is equal to two, and so is the expected value.

题目大意:用r*r的矩阵去套k条鱼,问期望值是多少?

思路:中间放一条鱼对答案贡献肯定最大,根据对称性,上下左右可得下一个最大值,向四个方向BFS,贡献值逐级递减

#include 
typedef long long ll;using namespace std;int n,m,r,k;ll sum;map
,bool> vis;int dir[4][2]={0,1, 0,-1, 1,0, -1,0};struct node{ int x,y; ll v; bool operator <(const node & obj) const{ //为了排序 return v
que; que.push(temp); while(!que.empty()){ node t,tt; t=que.top(); que.pop(); sum+=t.v; k--; if(k==0) break; for(int i=0;i<4;i++){ int nx=dir[i][0]+t.x; int ny=dir[i][1]+t.y; if(!vis[make_pair(nx,ny)]&&nx>=1&&nx<=n&&ny>=1&&ny<=m){ tt.x=nx,tt.y=ny,tt.v=cul(nx,ny); que.push(tt); vis[make_pair(nx,ny)]=true; } } //puts(""); } return sum;}int main(void){ cin>>n>>m>>r>>k; ll tot=1LL*(n-r+1)*(m-r+1); ll sum=solve(); printf("%.12f\n",sum*1.0/tot);}

转载地址:http://pgziz.baihongyu.com/

你可能感兴趣的文章
MySQL执行计划【explain】,看这一篇就够啦!
查看>>
Mysql执行计划字段解释
查看>>
mysql执行计划怎么看
查看>>
MySQL执行计划解读
查看>>
mysql执行顺序与索引算法
查看>>
mysql批量update优化_Mysql中,21个写SQL的好习惯,你值得拥有呀
查看>>
mysql批量update操作时出现锁表
查看>>
MYSQL批量UPDATE的两种方式
查看>>
mysql批量修改字段名(列名)
查看>>
MySQL批量插入数据遇到错误1213的解决方法
查看>>
mysql技能梳理
查看>>
MySQL报Got an error reading communication packets错
查看>>
Mysql报错Can‘t create/write to file ‘/tmp/#sql_3a8_0.MYD‘ (Errcode: 28 - No space left on device)
查看>>
MySql报错Deadlock found when trying to get lock; try restarting transaction 的问题解决
查看>>
MySQL报错ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘
查看>>
Mysql报错Packet for query is too large问题解决
查看>>
mysql报错级别_更改MySQL日志错误级别记录非法登陆(Access denied)
查看>>
Mysql报错:too many connections
查看>>
MySQL报错:无法启动MySQL服务
查看>>
mysql授权用户,创建用户名密码,授权单个数据库,授权多个数据库
查看>>