2022-11-24:小团在地图上放了3个定位装置,想依赖他们进行定位! 地图是一个n*n的棋盘, 有3个定位装置(x1,y1),(x2,y2),(x3,y3),每个值均在[1,n]内。 小团在(a,
2022-11-24:小团在地图上放了3个定位装置,想依赖他们进行定位!
地图是一个n*n的棋盘,
有3个定位装置(x1,y1),(x2,y2),(x3,y3),每个值均在[1,n]内。
小团在(a,b)位置放了一个信标,
每个定位装置会告诉小团它到信标的曼哈顿距离,也就是对于每个点,小团知道|xi-a|+|yi-b|
求信标位置,信标不唯一,输出字典序最小的。
输入n,然后是3个定位装置坐标,
最后是3个定位装置到信标的曼哈顿记录。
输出最小字典序的信标位置。
1 <= 所有数据值 <= 50000。
来自美团。8.20笔试。题目2。
答案2022-11-24:
先找半径小的,小圆周要快些,宽度优先遍历。
代码用golang编写。代码如下:
package main
import (
"fmt"
)
func main() {
ans := find(3, []int{1, 1}, []int{3, 1}, []int{3, 4}, 3, 3, 2)
fmt.Println(ans)
}
const MAX_VALUE = 1<<31 - 1
func find(n int, a, b, c []int, ad, bd, cd int) []int {
var x1 []int
r1 := MAX_VALUE
var x2 []int
r2 := 0
var x3 []int
r3 := 0
if ad < r1 {
x1 = a
r1 = ad
x2 = b
r2 = bd
x3 = c
r3 = cd
}
if bd < r1 {
x1 = b
r1 = bd
x2 = a
r2 = ad
x3 = c
r3 = cd
}
if cd < r1 {
x1 = c
r1 = cd
x2 = a
r2 = ad
x3 = b
r3 = bd
}
// x1 r1 x2 r2 x3 r3
cur := []int{x1[0] - r1, x1[1]}
queue := make([][]int, 0)
visited := make(map[string]struct{})
ans := make([][]int, 0)
queue = append(queue, cur)
visited[fmt.Sprintf("%d_%d", cur[0], cur[1])] = struct{}{}
for len(queue) > 0 {
// cur x1为圆心,r1为半径的圆周上
cur = queue[0]
queue = queue[1:]
if cur[0] >= 1 && cur[0] <= n && cur[1] >= 1 && cur[1] <= n && distance(cur[0], cur[1], x2) == r2 && distance(cur[0], cur[1], x3) == r3 {
ans = append(ans, cur)
}
if len(ans) == 2 {
break
}
add(cur[0]-1, cur[1]-1, x1, r1, &queue, visited)
add(cur[0]-1, cur[1], x1, r1, &queue, visited)
add(cur[0]-1, cur[1]+1, x1, r1, &queue, visited)
add(cur[0], cur[1]-1, x1, r1, &queue, visited)
add(cur[0], cur[1]+1, x1, r1, &queue, visited)
add(cur[0]+1, cur[1]-1, x1, r1, &queue, visited)
add(cur[0]+1, cur[1], x1, r1, &queue, visited)
add(cur[0]+1, cur[1]+1, x1, r1, &queue, visited)
}
if len(ans) == 1 || ans[0][0] < ans[1][0] || (ans[0][0] == ans[1][0] && ans[0][1] < ans[1][1]) {
return ans[0]
} else {
return ans[1]
}
}
func add(x, y int, c []int, r int, queue *[][]int, visited map[string]struct{}) {
key := fmt.Sprintf("%d_%d", x, y)
_, ok := visited[key]
if (distance(x, y, c) == r) && !ok {
*queue = append(*queue, []int{x, y})
visited[key] = struct{}{}
}
}
func distance(x, y int, c []int) int {
return abs(x-c[0]) + abs(y-c[1])
}
func abs(a int) int {
if a < 0 {
return -a
} else {
return a
}
}
执行结果如下:

2022-11-24:小团在地图上放了3个定位装置,想依赖他们进行定位! 地图是一个n*n的棋盘, 有3个定位装置(x1,y1),(x2,y2),(x3,y3),每个值均在[1,n]内。 小团在(a,的更多相关文章
- [javascript svg fill stroke stroke-width x1 y1 x2 y2 line stroke-opacity fill-opacity 属性讲解] svg fill stroke stroke-width stroke-opacity fill-opacity line绘制线条属性讲解
<!DOCTYPE html> <html lang='zh-cn'> <head> <title>Insert you title</title ...
- 买茶叶想到的哪个比较便宜 x1/y1 >x2/y2 x代表多少钱 y代表 多少克 无聊的试炼
茶叶1 128元 200克 茶叶2 330元 160克 当然这个哪个便宜 一眼就知道了,这里不过抛砖引玉 128元 330元 200克 160克 我们把价钱用x表示 多少克 ...
- 2. Marker 标记(就是在地图上放上标记)
1 <!DOCTYPE html> 2 <html lang="zh"> 3 <head> 4 <meta charset="U ...
- Discuz X1.5 X2.5 X3 UC_KEY Getshell Write PHPCODE into config/config_ucenter.php Via /api/uc.php Vul
目录 . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 在Discuz中,uc_key是UC客户端与服务端通信的通信密钥.因此使用uc_k ...
- Openlayers3 计算地图上随意两点间的距离
相应的openlayers的版本号为3.7. 主要用的接口是ol.Sphere.haversineDistance([x1,y1],[x2,y2]): 4326坐标系中计算两点距离的方式为: var ...
- hdu5794 A Simple Chess 容斥+Lucas 从(1,1)开始出发,每一步从(x1,y1)到达(x2,y2)满足(x2−x1)^2+(y2−y1)^2=5, x2>x1,y2>y1; 其实就是走日字。而且是往(n,m)方向走的日字。还有r个障碍物,障碍物不可以到达。求(1,1)到(n,m)的路径条数。
A Simple Chess Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)To ...
- 如何在iOS地图上高效的显示大量数据
2016-01-13 / 23:02:13 刚才在微信上看到这篇由cocoachina翻译小组成员翻译的文章,觉得还是挺值得参考的,因此转载至此,原文请移步:http://robots.thought ...
- [ios3-地图] 如何在iOS地图上高效的显示大量数据 [转]
[转至:http://blog.csdn.net/pjk1129/article/details/17358337] 原文:How To Efficiently Display Large Amoun ...
- iOS进阶_地图上定位的标志——大头针
一.添加大头针 地图使用的框架是MapKit 大头针走的是MKAnnotation协议 /* 注意:因为是满足协议MKAnnotation,所以没有MKAnnotation的系统大头针类,必须自定义大 ...
- Android中Google地图路径导航,使用mapfragment地图上画出线路(google map api v2)详解
在这篇里我们只聊怎么在android中google map api v2地图上画出路径导航,用mapfragment而不是mapview,至于怎么去申请key,manifest.xml中加入的权限,系 ...
随机推荐
- MIUI 12.5稳定版关闭充电提示音的方法
手机开启开发中模式 将手机连接电脑 打开cmd, 输入命令:adb shell settings put global power_sounds_enabled 0,即可关闭充电时的提示音 输入命令: ...
- java获取前端的token并验证与拦截器
请求时获取token并验证 public class MyInterceptor implements HandlerInterceptor { //方法执行前进行拦截 @Override publi ...
- IBM 双队列管理器,双向传输
1. 建立队列管理器 建立[test01][test02]两个队列管理器,一直下一步即可,端口号不能一致(需要记住设置的端口号,后面会用到) [test01]端口号 1414 [test02]端口号 ...
- Django-5
Django-5 1.Coookie 1.1 什么是cookie Cookie是储存在浏览器端的一小段文本数据(键值对). 被广泛用于在网站之间传输信息, 当您访问一个网站时,它会将一个Cookie发 ...
- 在echaerts中渲染50万条数据的优化方案
背景:项目需求中要在页面上渲染大约50万条左右的波形数据图表 那么如何解决渲染中的卡顿呢? 肯定是要从服务端和前端一起优化这是毋庸置疑的. 1.服务端: 服务端耗时最多的一定是在数据库的筛选数据的行为 ...
- ChatGPT能给IOT行业带来哪些改变
引言 随着移动互联网.传感器的发展,移动互联的潮流逐渐转移到物联网行业,每个设备成为了物联网连接的终端. 与传统的设备相比,智能设备最突出的特点就是智能化.目前,在市场上的智能设备通过智能程序设定或者 ...
- Shell---控制流程
操作系统: RHEL7.x 或CentOS 7.x 最小化安装 配置好固定的IP,能访问互联网 配置好yum源(yum repolist 可以查看yum源) 本地光盘 挂载光盘,开机自动挂载 vim ...
- IDEA2022中部署Tomcat Web项目
使用工具: IDEA2022 Tomcat9.0.4 1.下载Tomcat: 官网:https://tomcat.apache.org/ 找到需要的版本下载即可,下载完成解压即可用: Tomcat目录 ...
- SQL Server底层架构技术对比
背景 数据库是信息化的基石,支撑着整个业务系统,发挥着非常重要的作用,被喻为"IT的心脏".因此,让数据库安全.稳定.高效地运行已经成为IT管理者必须要面对的问题.数据库在底层架构 ...
- Java BIO,NIO,AIO
一丶IO模型&Java IO Unix为程序员提供了以下5种基本的io模型: blocking io: 阻塞io nonblocking io: 非阻塞io I/O multiplexing: ...