Description

windy有一块矩形土地,被分为 N*M 块 1*1 的小格子。 有的格子含有障碍物。 如果从格子A可以走到格子B,那么两个格子的距离就为两个格子中心的欧几里德距离。 如果从格子A不可以走到格子B,就没有距离。 如果格子X和格子Y有公共边,并且X和Y均不含有障碍物,就可以从X走到Y。 如果windy可以移走T块障碍物,求所有格子间的最大距离。 保证移走T块障碍物以后,至少有一个格子不含有障碍物。

Input

输入文件maxlength.in第一行包含三个整数,N M T。 接下来有N行,每行一个长度为M的字符串,'0'表示空格子,'1'表示该格子含有障碍物。

Output

输出文件maxlength.out包含一个浮点数,保留6位小数。

Sample Input

【输入样例一】
3 3 0
001
001
110

【输入样例二】
4 3 0
001
001
011
000

【输入样例三】
3 3 1
001
001
001

Sample Output

【输出样例一】
1.414214

【输出样例二】
3.605551

【输出样例三】
2.828427

HINT

20%的数据,满足 1 <= N,M <= 30 ; 0 <= T <= 0 。 40%的数据,满足 1 <= N,M <= 30 ; 0 <= T <= 2 。 100%的数据,满足 1 <= N,M <= 30 ; 0 <= T <= 30 。

题解

枚举答案中两个格子中的一个,暴力Dijkstra,每经过一个1距离就加1,距离起点距离不超过T的就是移走至多T块障碍物能到的格子。

附代码:

#include <algorithm>
#include <cstdio>
#include <cmath>
#include <queue>
const int N = 50;
int map[N][N];
struct HeapNode{int i, j, d;HeapNode(int i = 0, int j = 0, int d = 0) : i(i), j(j), d(d) {}bool operator<(const HeapNode &x)const{return d > x.d;}
};
std::priority_queue<HeapNode> Q;
int dis[N][N], n, m, T, ans;
const int d[][2] = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}};
void Dijkstra(int si, int sj) {std::fill(dis[0], dis[n], 10000);while (!Q.empty()) Q.pop();Q.push(HeapNode(si, sj, dis[si][sj] = map[si][sj]));while (!Q.empty()) {HeapNode x = Q.top(); Q.pop();if (x.d != dis[x.i][x.j]) continue;if (x.d > T) return;int ui = x.i, uj = x.j;ans = std::max(ans, (ui - si) * (ui - si) + (uj - sj) * (uj - sj));for (int k = 0; k < 4; ++k) {int vi = ui + d[k][0], vj = uj + d[k][1];if (~vi && ~vj && vi < n && vj < m && dis[vi][vj] > x.d + map[vi][vj])Q.push(HeapNode(vi, vj, dis[vi][vj] = x.d + map[vi][vj]));}}
}
int main() {scanf("%d%d%d", &n, &m, &T);for (int i = 0; i < n; ++i)for (int j = 0; j < m; ++j)scanf("%1d", &map[i][j]);ans = 0;for (int i = 0; i < n; ++i)for (int j = 0; j < m; ++j)Dijkstra(i, j);printf("%.6f", sqrt((float)ans));return 0;
}

  

转载于:https://www.cnblogs.com/y-clever/p/7028955.html

BZOJ1295 [SCOI2009]最长距离相关推荐

  1. bzoj 1295: [SCOI2009]最长距离

    题目链接 1295: [SCOI2009]最长距离 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 1165  Solved: 619 [Submit ...

  2. BZOJ 1295: [SCOI2009]最长距离 spfa

    1295: [SCOI2009]最长距离 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=1295 Description windy有一块 ...

  3. bzoj 1295: [SCOI2009]最长距离(SPFA)

    1295: [SCOI2009]最长距离 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 1697  Solved: 919 [Submit][Sta ...

  4. SCOI2009 最长距离

    洛谷 BZOJ 分析 图论题.直接 \(dfs\) 加一点剪枝就能过了. 代码 #include <cmath> #include <cstdio> #include < ...

  5. [SCOI2009]最长距离

    Description windy有一块矩形土地,被分为 NM 块 11 的小格子. 有的格子含有障碍物. 如果从格子A可以走到格子B,那么两个格子的距离就为两个格子中心的欧几里德距离. 如果从格子A ...

  6. B1295 [SCOI2009]最长距离 最短路

    就是一道最短路的裸题,直接跑spfa就行了.(spfa死了) 最后在答案处判断是否障碍物太多,然后就直接找最大值就行. (数据特别水,我错误算法60) 题干: Descriptionwindy有一块矩 ...

  7. 退役前的做题记录2.0

    退役前的做题记录2.0 最近在刷省选题......大致上是按照省份刷的. 不过上面的题目顺序是按照写题的顺序排列的,所以可能会有点乱哈. [BZOJ2823][AHOI2012]信号塔 最小圆覆盖,随 ...

  8. 【水】【SCOI】 精简题解

    第二弹 [SCOI2009]生日快乐 搜索.递归划分问题. [SCOI2009]游戏 记忆化搜索.枚举素因子,DP. [SCOI2009]windy数 数位DP,分块统计. [SCOI2009]最长距 ...

  9. OI 刷题记录——每周更新

    每周日更新 2016.05.29 UVa中国麻将(Chinese Mahjong,Uva 11210) UVa新汉诺塔问题(A Different Task,Uva 10795) NOIP2012同余 ...

最新文章

  1. 大白话详解5种网络IO模型
  2. 在虚拟机上linux系统上上网
  3. UML系统分析与设计01-准备
  4. 2020 云原生技术 7 大领域趋势全预测
  5. 【学术相关】翻倍!研究生招生规模持续扩张!
  6. 《统计学》学习笔记之时间序列分析和预测
  7. [你必须知道的.NET]第二十九回:.NET十年(上)
  8. 智慧讲台接收画板协议规划
  9. 矢量算法java,矢量线的一种栅格化算法
  10. Java扫雷游戏的设计与实现毕业设计论文
  11. IJCAI21审稿机制介绍:提交时间、提交流程、注意事项等
  12. 颈椎病自我治疗预防颈椎病
  13. 关于MacBook蓝牙键盘鼠标耳机等设备各种的卡顿、黏滞、断开连接等各种问题解决方案
  14. 超低功耗MCU的选择方法
  15. Canvas--画直线
  16. 在互联网中,资源免费共享还能走多久!
  17. 网易控股的立马理财逾期,网易前员工爆料:把内部员工当韭菜
  18. 《概率论与数理统计》-第二章 随机变量及其分布-第一节 离散型随机变量及其分布-笔记
  19. JavaScript打字小游戏
  20. [opencv完整项目详解] 传统图像算法解决路标的检测和识别(改进升级版)

热门文章

  1. 「杂谈」为什么你学了AI,企业却不要你
  2. 「技术综述」有三AI不得不看的技术综述
  3. 「可解释ML/3D深度学习等」Github六月最受欢迎的机器学习库来啦
  4. 技术道路独行16载,他总结了CTO的五大自我修炼法则!
  5. 是什么阻碍了你的 AI 致富路?
  6. 一句话总结人工神经网络
  7. gitzip没有作用以及github如何下载单个文件或目录
  8. 求助马斯克实现载人飞行,NASA省了近300亿美元
  9. 演化树,靠不住?挑战物种出现与灭绝速率的估算方法
  10. 《自然》深度:中国AI能在2030年制霸世界吗?