思路:

利用了曼哈顿距离和切比雪夫距离之间的转化。

参考:

https://blog.csdn.net/Dylan_Frank/article/details/88985444

https://www.cnblogs.com/SGCollin/p/9636955.html

以后如果再遇到需要先计算大量曼哈顿距离然后再计算这些曼哈顿距离中的最大值的时候,就要考虑下是否可以转化为切比雪夫距离来优化了。

实现:

 #include <bits/stdc++.h>
using namespace std;
typedef pair<int, int> pii;
const int N = ;
const int INF = 0x3f3f3f3f;
const int dx[] = {, , , -};
const int dy[] = {, , -, };
char a[N][N];
int dis[N][N], vis[N][N];
bool check(int k, int r, int c)
{
memset(dis, , sizeof dis);
memset(vis, , sizeof vis);
queue<pii> q;
for (int i = ; i < r; i++)
{
for (int j = ; j < c; j++)
{
if (a[i][j] == '')
{
q.push(pii(i, j));
vis[i][j] = ;
dis[i][j] = ;
}
}
}
int maxn = ;
while (!q.empty())
{
pii tmp = q.front(); q.pop();
for (int i = ; i < ; i++)
{
int nx = tmp.first + dx[i], ny = tmp.second + dy[i];
if (nx >= && nx < r && ny >= && ny < c && !vis[nx][ny])
{
vis[nx][ny] = ;
q.push(pii(nx, ny));
dis[nx][ny] = dis[tmp.first][tmp.second] + ;
maxn = max(maxn, dis[nx][ny]);
}
}
}
if (maxn <= k) return true;
int maxx = -INF, maxy = -INF, minx = INF, miny = INF;
for (int i = ; i < r; i++)
{
for (int j = ; j < c; j++)
{
if (dis[i][j] > k)
{
maxx = max(maxx, i + j);
minx = min(minx, i + j);
maxy = max(maxy, i - j);
miny = min(miny, i - j);
}
}
}
int ans = maxn;
for (int i = ; i < r; i++)
{
for (int j = ; j < c; j++)
{
if (a[i][j] == '') continue;
int tx = i + j, ty = i - j, maxd = -INF;
maxd = max(maxd, abs(maxx - tx));
maxd = max(maxd, abs(minx - tx));
maxd = max(maxd, abs(maxy - ty));
maxd = max(maxd, abs(miny - ty));
ans = min(ans, maxd);
}
}
return ans <= k;
}
int main()
{
int T, r, c;
cin >> T;
for (int t = ; t <= T; t++)
{
cin >> r >> c;
for (int i = ; i < r; i++)
for (int j = ; j < c; j++)
cin >> a[i][j];
int L = , R = r + c, ans = INF;
while (L <= R)
{
int m = L + R >> ;
if (check(m, r, c))
{
R = m - ;
ans = m;
}
else L = m + ;
}
cout << "Case #" << t << ": " << ans << endl;
}
return ;
}

kickstart2019 round_A B. Parcels的更多相关文章

  1. cdh5.15集群添加spark2.3服务(parcels安装)

    背景: 机器系统:redhat7.3:已经配置了http服务 集群在安装的时候没有启动spark服务,因为cdh5.15自带的spark不是2.0,所以直接进行spark2.3的安装 参考文档:htt ...

  2. 【CF480D】Parcels DP

    [CF480D]Parcels 题意:有一个栈,有n个物品,每个物品可以选或不选.如果选了第i个物品,则获得$v_i$的收益,且第i个物品必须在$in_i$时刻入栈,$out_i$时刻出栈.每个物品还 ...

  3. Cloudera Manager安装之利用parcels方式安装3或4节点集群(包含最新稳定版本或指定版本的安装)(添加服务)(CentOS6.5)(五)

    参考博客 Cloudera Manager安装之利用parcels方式安装单节点集群  Cloudera Manager安装之Cloudera Manager 5.3.X安装(三)(tar方式.rpm ...

  4. Cloudera Manager安装之利用parcels方式安装单节点集群(包含最新稳定版本或指定版本的安装)(添加服务)(CentOS6.5)(四)

    不多说,直接上干货! 福利 => 每天都推送 欢迎大家,关注微信扫码并加入我的4个微信公众号:   大数据躺过的坑      Java从入门到架构师      人工智能躺过的坑          ...

  5. Cloudera Manager安装之利用parcels方式(在线或离线)安装3或4节点集群(包含最新稳定版本或指定版本的安装)(添加服务)(Ubuntu14.04)(五)

    前期博客 Cloudera Manager安装之Cloudera Manager 5.6.X安装(tar方式.rpm方式和yum方式) (Ubuntu14.04) (三) 如果大家,在启动的时候,比如 ...

  6. Kudu安装(官网推荐的步骤)(installing Kudu using parcels or packages)

    不多说,直接上干货! Kudu安装前的建议说明(博主推荐) Kudu官网推荐的步骤: 本篇博文是installing Kudu using parcels or packages的方式. http:/ ...

  7. #2 codeforces 480 Parcels

    题意: 就是有一个用来堆放货物的板,承重力为S.现在有N件货物,每件货物有到达的时间,运走的时间,以及重量,承重,存放盈利.如果这件货物能再运达时间存放,并在指定时间取走的话,就能获得相应的盈利值.货 ...

  8. CDH-5.7.0:基于Parcels方式离线安装配置

    http://shiyanjun.cn/archives/1728.html https://www.waitig.com/cdh%E5%AE%89%E8%A3%85.html

  9. kickstart2019 round_C B. Circuit Board

    思路: 这题应该不止一种解法,其中的一种可以看作是leetcode85https://www.cnblogs.com/wangyiming/p/11059176.html的加强版: 首先对于每一行,分 ...

随机推荐

  1. KickStart安装CentOS,同时安装和配置hadoop

    声明:这篇文章是前面是拾人牙慧,我是结合 http://www.111cn.net/sys/linux/59969.htm 和 http://www.cnblogs.com/mchina/p/cent ...

  2. 你所必须知道的HTML

    只有在MySQL中可以使用"utf-8"的别名"utf8",但是在其他地方一律使用大写"UTF-8". htm 与 html 的区别  两种 ...

  3. p2590&bzoj1036 树的统计

    传送门(洛谷) 传送门(bzoj) 题目 一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w.我们将以下面的形式来要求你对这棵树完成一些操作: I. CHANGE u t : 把结点u的权值 ...

  4. C#中的?问号用法总结

    在C#中有个较为重要,而常被一些人忽视的符号——问号(?).在这里整理一下它在C#的几种情况: 可空类型修饰符“T?”:可空类型的基础类型可以是任何非可空值类型或任何具有struct约束的类型参数,但 ...

  5. redis学习总结2

    redis配置文件说明:以下这篇文章已经说明的很明白了.感谢~ http://blog.sina.com.cn/s/blog_636415010101970j.html

  6. 《鸟哥的Linux私房菜》读书笔记1

    1.MBR 可以说是整个硬盘最重要的地方了,因为在 MBR 里面记录了两个重要的东西,分别是:开机管理程序,与磁盘分割表 ( partition table ).下次记得人家在谈磁盘分割的时候, 不要 ...

  7. rowid去重(转)

    实际应用场景:数据去重--当多条记录主键相同或者多条记录完全一致时,只需要留下一条记录 delete from bal_acctbook_info where rowid not in (select ...

  8. 手写堆的dijkstra

    颓废.. #include <cstdio> #include <cstring> #include <algorithm> using namespace std ...

  9. 洛谷P2380 狗哥采矿

    P2380 狗哥采矿 题目背景 又是一节平静的语文课 狗哥闲来无事,出来了这么一道题 题目描述 一个n*m的矩阵中,每个格子内有两种矿yeyenum和bloggium,并且知道它们在每个格子内的数量是 ...

  10. CentOS编译安装GCC 4.9.2成功

    在Linux上编译安装gcc是个寻烦恼的活,对于像我这样习惯于在Windows上面使用二进制安装包的人来说,自已编译安装gcc是个相当大的挑战,今天直接挑战最新版的gcc,是4.9.2版本的,做之前查 ...