Codeforces 912 D. Fishes (贪心、bfs)
题目链接:Fishes
题意:
有一个n×m的鱼塘,有一张r×r的渔网,现在往池塘里面放k条鱼(每个格子只能放一条鱼), 现在撒网的地方是随机的(必须在池塘内),问能捕的鱼的期望值最大是多少?
题解:
这题dfs我是真的没想到。。因为怎么说,总是感觉这样有些暴力吧@。@# 要好好反思了。这题首先要把每个位置网覆盖的次数的公式推出来(用if else也行其实),因为可以发现最中间的位置一定最大,所以选取最中间的位置开始bfs,把遇到的点都放到优先队列中,这里对优先队列进行符号重载就可以很好地解决排序的问题,很值得学习。
1 #include<bits/stdc++.h> 2 using namespace std; 3 const int MAX_N = 1e5+9; 4 long long N,M,r,k; 5 struct P 6 { 7 long long first,second; 8 P(int x,int y){first = x,second = y;} 9 }; 10 priority_queue <P> que; 11 set<int> st[MAX_N]; 12 long long get_val(P t) 13 { 14 return (min(N - r + 1, t.first) - max(1ll, t.first - r + 1) + 1) * (min(M - r + 1, t.second) - max(1ll, t.second - r + 1) + 1); 15 } 16 bool operator < (const P &a,const P &b) 17 { 18 return get_val(b) > get_val(a); 19 } 20 21 int main() 22 { 23 while(cin>>N>>M>>r>>k) 24 { 25 while(!que.empty()) que.pop(); 26 for(int i=0;i<MAX_N;i++) st[i].clear(); 27 int x = (N+1)/2; 28 int y = (M+1)/2; 29 que.push(P(x,y)); 30 st[x].insert(y); 31 double ans = 0; 32 long long num = 0; 33 while(!que.empty()) 34 { 35 P t = que.top();que.pop(); 36 ans += (get_val(t)*1.0)/((N-r+1)*(M-r+1)*1.0); 37 k--; 38 if(!k) break; 39 //cout<<t.first<<"..."<<t.second<<"...."<<get_val(t)<<endl; 40 if(t.first+1>0 && t.first+1<=N && st[t.first+1].count(t.second) == 0) que.push(P(t.first+1,t.second)),st[t.first+1].insert(t.second); 41 if(t.first-1>0 && t.first-1<=N && st[t.first-1].count(t.second) == 0) que.push(P(t.first-1,t.second)),st[t.first-1].insert(t.second); 42 if(t.second-1 >0 && t.second-1 <=M && st[t.first].count(t.second-1) == 0) que.push(P(t.first,t.second-1)),st[t.first].insert(t.second-1); 43 if(t.second+1 >0 && t.second+1 <=M && st[t.first].count(t.second+1) == 0) que.push(P(t.first,t.second+1)),st[t.first].insert(t.second+1); 44 } 45 printf("%.10lf\n",ans); 46 } 47 return 0; 48 }
转载于:https://www.cnblogs.com/doggod/p/8413035.html
Codeforces 912 D. Fishes (贪心、bfs)相关推荐
- 【Codeforces】158B-Taxi(贪心,怎么贪咧)
贪心 emmmm http://codeforces.com/contest/158/problem/B 题目大意:有四种旅客,四人一组,三人一组,两人一组,一人一组,一辆出租车最多可以 ...
- CodeForces - 1607D Blue-Red Permutation(贪心)
题目链接:点击查看 题目大意:给出一个长度为 nnn 的数列,每个数字有一个颜色,如果是蓝色,每次操作则可以减一:如果是红色,每次操作则可以加一. 问有限次操作后,能否将数组变为一个长度为 nnn 的 ...
- CodeForces - 1481E Sorting Books(贪心+dp)
题目链接:点击查看 题目大意:给出一个长度为 nnn 的序列,每次操作可以将任意一本书放到序列的末尾,问最少需要操作多少次,才能使得相同的数字挨在一起 题目分析:不难看出,对每个位置的数都操作一次,是 ...
- hdu-1728(贪心bfs的灵活运用吧)
链接 [https://vjudge.net/contest/256476#problem/D] 题意 给定一个m × n (m行, n列)的迷宫,迷宫中有两个位置,gloria想从迷宫的一个位置走到 ...
- CodeForces 176A Trading Business 贪心
Trading Business 题目连接: http://codeforces.com/problemset/problem/176/A Description To get money for a ...
- LeetCode 45. 跳跃游戏 II(贪心/BFS,难)
文章目录 1. 题目 2. 解题 2.1 贪心 2.2 BFS 1. 题目 给定一个非负整数数组,你最初位于数组的第一个位置. 数组中的每个元素代表你在该位置可以跳跃的最大长度. 你的目标是使用最少的 ...
- codeforces 735C Tennis Championship(贪心+递推)
Tennis Championship 题目链接:http://codeforces.com/problemset/problem/735/C --每天在线,欢迎留言谈论. 题目大意: 给你一个 n ...
- Codeforces 161 B. Discounts (贪心)
题目链接:http://codeforces.com/contest/161/problem/B 题意: 有n个商品和k辆购物车,给出每个商品的价钱c和类别t(1表示凳子,2表示铅笔),如果一辆购物车 ...
- 力扣765——情侣牵手(贪心+BFS)
解题思路 空间换时间 可以发现,每对情侣谁左谁右,旁边是谁,都没关系,只要这俩是一对且在一格就行: 因为要求全坐好,因为首尾不相连,下标0只能和下标1配对,这就相当于一格为两个偶奇下标: 首先遍历每一 ...
最新文章
- Java报错:java.math.BigDecimal cannot be cast to java.lang.String
- 杏树林孙文亮:在线医疗数据驱动实战
- WebIDE,让开发更简单
- mysql search yum_mysql安装-yum方式
- LeetCode 683. K 个空花盆(set/滑动窗口)
- Java IO(File类)
- C# 中XML序列化与反序列化学习笔记
- 【Shell】特殊变量
- IDEA中XML与main文件里设置自动补全快捷键
- 极通EWEBS远程接入v4.2 XP专版
- Ch6 深度前馈神经网络
- word括号显示问题
- 存储器计算机原理实验,存储器扩展实验|计算机原理存储器扩展实验
- win10系统关机被阻止解决方法
- 国内外AI绘画软件汇总
- WPF入门教程系列(2)---基础篇
- js如何实现侧边广告_如何用稳定器轻松实现低成本的商业级广告片制作?
- DZ 系统维护工具箱Tools
- 服务器系统防火墙设置在哪里设置方法,服务器怎么设置防火墙设置在哪里
- 股票pb接口是什么?