思路:

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

参考:

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. RN控件之TextInput

    /** * Sample React Native App * https://github.com/facebook/react-native */ 'use strict'; import Rea ...

  2. 项目一:第五天 1、区域数据(pinyin4j-简码,城市编码) 2、Web层代码重构(model对象,分页代码提取) 3、区域分页查询 3、分区添加功能 4、定区管理管理-添加,分页

    Service: /** * @Description: 1.保存定区  2.让分区关联定区 * 对象三种状态 1.持久态(被session管理对象-一级缓存中有对象) 2.托管态(有OID标识,数据 ...

  3. python的pip 安装

    python的pip 安装 python有很多好用的包,但是需要的时候一一安装实在是麻烦,还好有pip这么好用的安装工具.所以第一步是安装pip,然后其它软件都so easy! 文章来源:https: ...

  4. 想以编程为职业,现在正在看毕向东的java基础,接下来应该看什么视频,求前辈们指教。

    想以编程为职业,现在正在看毕向东的java基础,接下来应该看什么视频,求前辈们指教. https://zhidao.baidu.com/question/1368482680246425699.htm ...

  5. Enigma模拟-Python

    设计思想 Enigma机的机械结构: 键盘:加密人员通过键盘进行输入 转子:Enigma机上一般装有至少3个转轮.每个转轮有代表26个字母的触头和触点,触点和触头在转轮内部有导线相连(一个转轮相当于一 ...

  6. 洛谷P1022 计算器的改良

    P1022 计算器的改良 题目背景 NCL是一家专门从事计算器改良与升级的实验室,最近该实验室收到了某公司所委托的一个任务:需要在该公司某型号的计算器上加上解一元一次方程的功能.实验室将这个任务交给了 ...

  7. 洛谷P2380 狗哥采矿

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

  8. 分别使用ES5和ES6进行数组去重以及注意事项

    ES6,ES5数组去重 使用Es6进行数组去重 var arr = [false, true, undefined, null, NaN, 0, 1, {}, {}, 'a', 'a', NaN]; ...

  9. luoguP4389 付公主的背包

    luogu 显然这是个背包题 显然物品的数量是不用管的 所以考虑大小为\(v\)的物品可以装的体积用生成函数表示一下 \[ f(x)=\sum_{i=0}^{+\infty}x^{vi}=\frac{ ...

  10. CODEVS 3027 线段覆盖2

    首先,先看题.....(虽然比较简单 3027 线段覆盖 2    时间限制: 1 s  空间限制: 128000 KB 题目描述 Description 数轴上有n条线段,线段的两端都是整数坐标,坐 ...