Kick Start 2019 Round A Parcels
题目大意
$R \times C$ 的网格,格子间的距离取曼哈顿距离。有些格子是邮局。现在可以把至多一个不是邮局的格子变成邮局,问每个格子到最近的邮局的曼哈顿距离的最大值最小是多少。
数据范围
- $ 1 \le R \le 250 $
- $ 1 \le C \le 250 $
- 100 组测试数据
- Time limit: 15 s
分析
显然可以二分答案。
几何视角
考虑平面上的整点(也称格点)。到一个格点的曼哈顿距离不大于 $k$ 的所有格点的轮廓是一个旋转了 45° 的正方形( For any point, the set of points within a manhattan distance of K form a square rotated by 45 degrees.),或者叫菱形。

考虑所有离现有邮局的最短距离大于 $k$ 的格点,简称「未覆盖点」,每个未覆盖点都关联着一个上一段所说的菱形。如果所有菱形的交集不为空,那么只要从交集中取一点作为新邮局即可。
这个方法的困难在于两个菱形的交集并不好计算。不过我们可以通过坐标变换,把原本的菱形变成正方形。正方形的交集是容易计算的。
这个变换在算法竞赛界称为曼哈顿距离转切比雪夫距离。
平面上两点 $ (x_1, y_1) $,$ (x_2, y_2) $ 的契比雪夫距离定义为 $\max(|x_1 - x_2|, |y_1 - y_2|)$ 。
对应的坐标变换是 $(x, y) \longrightarrow (x + y, x - y)$ 。
代数视角
上述坐标变换的根源是曼哈顿距离的定义:
两点 $ (x_1, y_1) $,$ (x_2, y_2) $ 的曼哈顿距离无非是下述四个值中最大者
$ (x_1 - x_2) + (y_1 - y_2) $
$ (x_1 - x_2) + (y_2 - y_1) $
$ (x_2 - x_1) + (y_1 - y_2) $
$ (x_2 - x_1) + (y_2 - y_1) $
亦即
$(x_1 + y_1) - (x_2 + y_2)$
$(x_1 - y_1) - (x_2 - y_2) $
$(x_2 - y_2) - (x_1 - y_1) $
$(x_2 + y_2) - (x_1 + y_1)$
四者的最大值。
于是有
\begin{equation}
|x_1 - y_1 | + |y_1 - y_2| = \max(|(x_1 + y_1) - (x_2 + y_2)|, |(x_1 - y_1) - (x_2 - y_2)|) \label{E:1}
\end{equation}
利用 \eqref{E:1} 式,我们可以从代数视角(而非几何视角)来解决这个问题。
不妨把新邮局的坐标视作 $(x_2, y_2)$,把现有邮局尚不能覆盖的点的坐标视作 $(x_1, y_1)$ 。
问题转化为
是否存在点 $(x_2, y_2)$,满足当 $(x_1, y_1)$ 取遍未覆盖点,\eqref{E:1} 的值始终不超过 $k$,换言之 \eqref{E:1} 的最大值不超过 $k$ 。
注意到,当 \eqref{E:1} 取最大值时,$x_1 + y_1$,$x_1 - y_1$ 必取最值(即取最大值或最小值)。
因此我们可以先遍历未覆盖点 $(x_1, y_1)$,算出 $x_1 + y_1$,$x_1 - y_1$ 的最值,再枚举所有可能的新邮局 $(x_2, y_2)$,求 \eqref{E:1} 式的最大值,进行判断。
Kick Start 2019 Round A Parcels的更多相关文章
- kick start 2019 round D T3题解
---恢复内容开始--- 题目大意:共有N个房子,每个房子都有各自的坐标X[i],占据每个房子需要一定花费C[i].现在需要选择K个房子作为仓库,1个房子作为商店(与题目不同,概念一样),由于仓库到房 ...
- kick start 2019 round D T2题解
题目大意:由N个房子围成一个环,G个人分别顺时针/逆时针在房子上走,一共走M分钟,每分钟结束,每个人顺/逆时针走到相邻的房子.对于每个房子都会记录最后时刻到达的人(可能是一群人).最终输出每个人会被几 ...
- Kick Start 2019 Round A Contention
$\DeclareMathOperator*{\argmax}{arg\,max}$ 题目链接 题目大意 一排 $N$ 个座位,从左到右编号 $1$ 到 $N$ . 有 $Q$ 个预定座位的请求,第 ...
- Kick Start 2019 Round H. Elevanagram
设共有 $N = \sum_{i=1}^{9} A_i$ 个数字.先把 $N$ 个数字任意分成两组 $A$ 和 $B$,$A$ 中有 $N_A = \floor{N/2}$ 个数字,$B$ 中有 $N ...
- Kick Start 2019 Round B Energy Stones
对我很有启发的一道题. 这道题的解法中最有思维难度的 observation 是 For simplicity, we will assume that we never eat a stone wi ...
- 【DP 好题】Kick Start 2019 Round C Catch Some
题目链接 题目大意 在一条数轴上住着 $N$ 条狗和一个动物研究者 Bundle.Bundle 的坐标是 0,狗的坐标都是正整数,可能有多条狗住在同一个位置.每条狗都有一个颜色.Bundle 需要观测 ...
- Kick Start 2019 Round F Teach Me
题目链接 题目大意 有 $N$ 个人,$S$ 项技能,这些技能用 $1, 2, 3, \dots, S$ 表示 .第 $i$ 个人会 $c_i$ 项技能($ 1 \le c_i \le 5 $).对于 ...
- Kick Start 2019 Round D
X or What? 符号约定: $\xor$ 表示异或. popcount($x$) 表示非负整数 $x$ 的二进制表示里数字 1 出现的次数.例如,$13 = 1101_2$,则 popcount ...
- Google Kick Start 2019 C轮 第一题 Wiggle Walk 题解
Google Kick Start 2019 C轮 第一题 Wiggle Walk 题解 题目地址:https://codingcompetitions.withgoogle.com/kickstar ...
随机推荐
- android 开发随手记
1.Fragment 跳转到Activity 修改数据,修改完后从Activity 返回(返回键)Fragment ,要求刷新Fragment界面的数据 解决办法: 在Fragment中注册一个监听广 ...
- 筛选前十按a-z顺序排
需求: 从arr数组中筛选出num最多的前十个,若是最后几个num的值一样,则最后几个按字母a-z的顺序排序,最后取出num最大的前十个: var arr = [{"id":&qu ...
- JavaWeb-RESTful(二)_使用SpringMVC开发RESTful_上
JavaWeb-RESTful(一)_RESTful初认识 传送门 JavaWeb-RESTful(二)_使用SpringMVC开发RESTful_上 传送门 JavaWeb-RESTful(三)_使 ...
- Zookeeper执行原理的详细概述
文章作者:Holy Null,来源:http://holynull.leanote.com/post/Zookeeper,非常感谢作者提供如此优秀的原创文章,作者通过俩个月的努力将<Hadoop ...
- SpringMVC工作原理的介绍
1.用户向服务器发送请求,请求被Spring前端控制Servlet DispatcherServlet捕获 2.DispatcherServlet对请求URL进行解析,得到请求资源标识符(URL).然 ...
- pycharm创建.py文件时,自动添加头文件注释
File->settings->Editor->Code Templates->Python Script 添加以下代码: #!/usr/bin/env python # -* ...
- MemoScope.Net
What is MemoScope.Net ? It's a tool to analyze .Net process memory: it can dump an application's mem ...
- C# 实现DataTable、DataSet与XML互相转换
/**//// <summary> /// 把DataSet.DataTable.DataView格式转换成XML字符串.XML文件 /// </summary> public ...
- SSL及TLS
SSL SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议. ...
- ftp列出具体目录的所有目录,和目录按照文件类型列出
package com.haiyisoft.cAssistantWeb.util; import java.io.IOException; import java.io.PrintWriter; im ...