kickstart2019 round_A B. Parcels
思路:
利用了曼哈顿距离和切比雪夫距离之间的转化。
参考:
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的更多相关文章
- cdh5.15集群添加spark2.3服务(parcels安装)
背景: 机器系统:redhat7.3:已经配置了http服务 集群在安装的时候没有启动spark服务,因为cdh5.15自带的spark不是2.0,所以直接进行spark2.3的安装 参考文档:htt ...
- 【CF480D】Parcels DP
[CF480D]Parcels 题意:有一个栈,有n个物品,每个物品可以选或不选.如果选了第i个物品,则获得$v_i$的收益,且第i个物品必须在$in_i$时刻入栈,$out_i$时刻出栈.每个物品还 ...
- Cloudera Manager安装之利用parcels方式安装3或4节点集群(包含最新稳定版本或指定版本的安装)(添加服务)(CentOS6.5)(五)
参考博客 Cloudera Manager安装之利用parcels方式安装单节点集群 Cloudera Manager安装之Cloudera Manager 5.3.X安装(三)(tar方式.rpm ...
- Cloudera Manager安装之利用parcels方式安装单节点集群(包含最新稳定版本或指定版本的安装)(添加服务)(CentOS6.5)(四)
不多说,直接上干货! 福利 => 每天都推送 欢迎大家,关注微信扫码并加入我的4个微信公众号: 大数据躺过的坑 Java从入门到架构师 人工智能躺过的坑 ...
- Cloudera Manager安装之利用parcels方式(在线或离线)安装3或4节点集群(包含最新稳定版本或指定版本的安装)(添加服务)(Ubuntu14.04)(五)
前期博客 Cloudera Manager安装之Cloudera Manager 5.6.X安装(tar方式.rpm方式和yum方式) (Ubuntu14.04) (三) 如果大家,在启动的时候,比如 ...
- Kudu安装(官网推荐的步骤)(installing Kudu using parcels or packages)
不多说,直接上干货! Kudu安装前的建议说明(博主推荐) Kudu官网推荐的步骤: 本篇博文是installing Kudu using parcels or packages的方式. http:/ ...
- #2 codeforces 480 Parcels
题意: 就是有一个用来堆放货物的板,承重力为S.现在有N件货物,每件货物有到达的时间,运走的时间,以及重量,承重,存放盈利.如果这件货物能再运达时间存放,并在指定时间取走的话,就能获得相应的盈利值.货 ...
- CDH-5.7.0:基于Parcels方式离线安装配置
http://shiyanjun.cn/archives/1728.html https://www.waitig.com/cdh%E5%AE%89%E8%A3%85.html
- kickstart2019 round_C B. Circuit Board
思路: 这题应该不止一种解法,其中的一种可以看作是leetcode85https://www.cnblogs.com/wangyiming/p/11059176.html的加强版: 首先对于每一行,分 ...
随机推荐
- ubuntu安装配置ApachePhpMysql
1.安装之前先sudo源 sudo apt update 2.安装Apache2 sudo apt install apache2 3.更改默认目录: vi /etc/apache2/apache2. ...
- Maven的pom实例
该pom中包含了一些我认为会需要的东西,并且加了注释.可以根据需求适当删减. 包含了spring-mvc , junit,hibernate验证,json,apache-commons组件 还有 co ...
- 嵌入式linux环境搭建
花了两天时间,终于搭建好了板子上的linux驱动开发环境,不容易呀,做个笔记. 首先搭建PC上的编译环境,因为编译的驱动是在板子上运行的,第一步当然需要安装交叉编译器,即arm-none-linux- ...
- 18. CTF综合靶机渗透(十一)
靶机描述: SkyDog Con CTF 2016 - Catch Me If You Can 难度:初学者/中级 说明:CTF是虚拟机,在虚拟箱中工作效果最好.下载OVA文件打开虚拟框,然后选择文件 ...
- Linux进程KILL不掉的原因
做过Linux开发的人通常遇到过一个进程不能kill掉的情况,即使使用的是kill -9方式,而一般的教课书都只说kill -9能杀死任何进程,遇到这种情况时就会感觉到很矛盾,其它这也是正常的,通常有 ...
- AndroidMainfest.xml文件解释
AndroidManifest.xml是每个android程序中必须的文件.它位于application的根目录,描述了package中的全局数据,包括了package中暴露的组件(activitie ...
- 整数划分——真正的递归经典例题(NYOJ——90)
先注明学习博客的地址:(http://www.cnblogs.com/hoodlum1980/archive/2008/10/11/1308493.html) 题目描述:任何正整数n都可以写成n=n1 ...
- CRM 客户关系管理系统
CRM(Customer Relationship Manager)客户关系管理系统 企业为提高核心竞争力,利用相应的信息技术以及互联网技术协调企业与顾客间在销售.营销和服务上的交互,从而提升其管理方 ...
- ShardingJDBC(一)-转载
Sharding-JDBC:垂直拆分怎么做? 原创: 尹吉欢 猿天地 今天 经过读写分离的优化后,小王可算是轻松了一段时间,读写分离具体的方案请查看这篇文章:Sharding-JDBC:查询量大如何优 ...
- 黑马MySQL数据库学习day03 级联 多表查询 连接和子查询 表约束
/* 存在外键的表 删表限制: 1.先删除从表,再删除主表.(不能直接删除主表,主表被从表引用,尽管实际可能还没有记录引用) 建表限制: 1.必须先建主表,再建从表(没有主表,从表无法建立外键关系) ...