kick-start 2019 round A: 题解

本文是作者对Google Kick-Start 2019 Round A的三道算法题目的解题心得。A题Training通过处理前缀和轻松解决;B题Parcel涉及多源BFS和曼哈顿距离转化为切比雪夫距离的技巧,二分查找优化后达到O(RClog(R+C))复杂度;C题Contention采用贪心策略,用扫描线或二分查找在O(Qlog N)时间内解决。
摘要由CSDN通过智能技术生成

题目链接

A. Training

这题很简单,处理一下前缀和就完事儿,没什么好说的。当时就做出了这个题 ?

code

github

B. parcel

这题还是很有意思的,正式赛没做出来,其实第一问暴力很容易求,不过 作为一名 ACMer,有一种惯性会忽略掉这种方式…,下次一定要补上了。

题解可以参考官方题解

我这里就是将题解翻译一下,同时总结一下学到东西。

分析

首先对于每一个没有 deliver 的位置,我们可以先求出它的最短距离。这个可以将整个地图看成一个 graph,然后,任意两个deliver之间的距离为 0,然后将 所有deliver 看做图上的一个节点,其他的点与点之间的距离为 曼哈顿距离,那么只需要对图做一个 bfs 就行了,这就是answer中说的 muti-source bfs,其实感觉与bfs 并没有什么区别。

然后对于答案来说我们可以二分枚举,将优化问题转化为 满足性问题。

也就是说 对于一个固定的 K K K, 我们判断,是否可以找到一个点使得,所有点到delivers的距离不会超过 K K K.

判断这个是很容易的。

这里涉及到一个 曼哈顿距离切比雪夫距离 的转化

关于曼哈顿距离与切比雪夫距离的转化,推荐参考 SGColin’s Space

有了这个我们就可以得到,答案分析中的结果

dist((x1, y1), (x2, y2)) = max(abs(x1 + y1 - (x2 + y2)), abs(x1 - y1 - (x2 - y2)))

那么固定一个点 ( x 2 x_2 x2, y 2 y_2 y2) 我们只需要求出 min ⁡ ( x i + y i ) , max ⁡ ( x i + y i ) , min ⁡ ( x i − y i ) , max ⁡ ( x i − y i ) , i ∈ d i s t ( i ) > K \min (x_i+y_i),\max (x_i+y_i),\min (x_i-y_i),\max (x_i - y_i), i \in dist(i)>K min(xi+yi),max(xi+yi),min(xiyi),max(xiyi),idist(i)>K

这个复杂度是 O ( R C

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值