题:

  OvO http://codeforces.com/contest/912/problem/D

解:

  枚举每一条鱼,每放一条鱼,必然放到最优的位置,而最优位置即使钓上的概率最大的位置,即最多的r*r矩形覆盖住的点

  可以把这个鱼塘分为田字型4个相同的部分(可重叠),

  取其中一个部分,显然最开始的最优位置是最靠近中心的位置,

  维护一个优先队列,优先度为点出现在多少个r*r的矩形中,

  每次从优先队列中取出一个点,则可以求出在其他部分上有多少不重叠的点和这个点对称,则可以同时进行计算。

  枚举到k个点结束

#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <queue>
#include <map> #define double long double using namespace std; typedef long long ll; const ll bas=1e9+44; struct node
{
int a,b;
ll c;
friend bool operator<(node x,node y)
{
return x.c<y.c;
}
}; map<ll,bool>mp;
priority_queue<node> que;
int n,m,r,k,nc,mc,nw,mw; int getNum(int a,int b)
{
if((a==(n+1)/2 && (n&1)) && (b==(m+1)/2 && (m&1))) return 1;
if((a==(n+1)/2 && (n&1)) || (b==(m+1)/2 && (m&1))) return 2;
return 4;
} double getPsi(ll c)
{
return 1.0*c/nw/mw;
} void solve()
{
mp.clear();
node tmp,now;
double psi,ans=0;
int num;
while(!que.empty())
que.pop();
now.a=(n+1)/2,now.b=(m+1)/2,now.c=1ll*min(nc,now.a)*min(mc,now.b);
que.push(now),mp[bas*now.a+now.b]=1;
while(k>0)
{
now=que.top(),que.pop();
num=getNum(now.a,now.b),num=min(num,k);
psi=getPsi(now.c);
// cout<<now.a<<' '<<now.b<<' '<<now.c<<' '<<num<<' '<<psi<<endl;
ans+=psi*num;
k-=num;
tmp.a=now.a-1,tmp.b=now.b,tmp.c=1ll*min(nc,tmp.a)*min(mc,tmp.b);
if(tmp.a>0 && tmp.b>0 && mp[bas*tmp.a+tmp.b]==0) que.push(tmp),mp[bas*tmp.a+tmp.b]=1;
tmp.a=now.a,tmp.b=now.b-1,tmp.c=1ll*min(nc,tmp.a)*min(mc,tmp.b);
if(tmp.a>0 && tmp.b>0 && mp[bas*tmp.a+tmp.b]==0) que.push(tmp),mp[bas*tmp.a+tmp.b]=1;
}
printf("%.12Lf\n",ans);
} int main()
{
scanf("%d%d%d%d",&n,&m,&r,&k);
nw=nc=n-r+1,mw=mc=m-r+1;
nc=min(r,nc),mc=min(r,mc);
solve();
return 0;
} /* 10 10 1 100 */

  

最新文章

  1. Android真机调试 Android.Util.AndroidRuntimeException: You cannot combine custom titles with other title features
  2. kafka消费者客户端(0.9.0.1API)
  3. 发现大量的TIME_WAIT解决办法
  4. 在Windows server 2008 R2上安装Python3.5
  5. 8.js模式-状态模式
  6. 《深度探索C++对象模型》1
  7. xcode7.3 升级 xcode8.0 后权限设置问题(升级xcode 8.0 后构建版本不显示问题)
  8. python 数据结构-列表
  9. 在命令行中如何访问Program Files文件夹(转)
  10. 解析xml的几种方式
  11. zookeeper[5] zookeeper集群配置及伪集群配置
  12. 浅谈 IE下innerHTML导致的问题
  13. C++ 友元函数的函数指针
  14. HTM CSS 笔记乱炖
  15. Chrome浏览器扩展开发系列之四:Browser Action类型的Chrome浏览器扩展
  16. 安卓开源框架SlidingMenu使用
  17. icheck如何修改样式大小
  18. SpringMVC之HelloWorld实例
  19. python的学习笔记01_3 基本运算符 流程控制if while 字符串常用办法
  20. netty入坑第一步:了解netty和编写简单的Echo服务器和客户端

热门文章

  1. [转帖]centos7设置CPU的运行频率为performance
  2. SpringBoot 使用WebSocket打造在线聊天室
  3. Java操作Excle(基于Poi)
  4. 1.4Zookeeper和Thymeleaf的使用
  5. 一块40克的砝码,摔成4块,利用天平,刚好可以称出1~40g所有整数克,问:这4块分别是多少克
  6. java实现4种内部排序
  7. select in关键字查询匹配多个字段
  8. Scala学习十六——XML处理
  9. C# WebForm 屏蔽输入框的验证
  10. java Map 四种遍历方法