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
}
}

执行结果如下:


左神java代码

2022-11-24:小团在地图上放了3个定位装置,想依赖他们进行定位! 地图是一个n*n的棋盘, 有3个定位装置(x1,y1),(x2,y2),(x3,y3),每个值均在[1,n]内。 小团在(a,的更多相关文章

  1. [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 ...

  2. 买茶叶想到的哪个比较便宜 x1/y1 >x2/y2 x代表多少钱 y代表 多少克 无聊的试炼

    茶叶1 128元     200克 茶叶2  330元    160克 当然这个哪个便宜 一眼就知道了,这里不过抛砖引玉 128元    330元 200克    160克 我们把价钱用x表示 多少克 ...

  3. 2. Marker 标记(就是在地图上放上标记)

    1 <!DOCTYPE html> 2 <html lang="zh"> 3 <head> 4 <meta charset="U ...

  4. 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 ...

  5. Openlayers3 计算地图上随意两点间的距离

    相应的openlayers的版本号为3.7. 主要用的接口是ol.Sphere.haversineDistance([x1,y1],[x2,y2]): 4326坐标系中计算两点距离的方式为: var ...

  6. 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 ...

  7. 如何在iOS地图上高效的显示大量数据

    2016-01-13 / 23:02:13 刚才在微信上看到这篇由cocoachina翻译小组成员翻译的文章,觉得还是挺值得参考的,因此转载至此,原文请移步:http://robots.thought ...

  8. [ios3-地图] 如何在iOS地图上高效的显示大量数据 [转]

    [转至:http://blog.csdn.net/pjk1129/article/details/17358337] 原文:How To Efficiently Display Large Amoun ...

  9. iOS进阶_地图上定位的标志——大头针

    一.添加大头针 地图使用的框架是MapKit 大头针走的是MKAnnotation协议 /* 注意:因为是满足协议MKAnnotation,所以没有MKAnnotation的系统大头针类,必须自定义大 ...

  10. Android中Google地图路径导航,使用mapfragment地图上画出线路(google map api v2)详解

    在这篇里我们只聊怎么在android中google map api v2地图上画出路径导航,用mapfragment而不是mapview,至于怎么去申请key,manifest.xml中加入的权限,系 ...

随机推荐

  1. mysql替换空格制表符换行

    update ztbdb_pro set pro=REPLACE(pro,CHAR(10),''); update ztbdb_pro set pro=REPLACE(pro,CHAR(13),'') ...

  2. mysql对汉字排序

    问题: 编写order by排序时,如果字段是汉字的话,排序会失效. 如: SELECT * FROM user ORDER BY age ASC,username DESC 此时按照username ...

  3. Oracle coalesce函数 用于选取不为空的字段值

    coalesce(A,B)  若A为空则值为B 主流数据库系统都支持COALESCE()函数,这个函数主要用来进行空值处理,其参数格式如下: COALESCE ( expression,value1, ...

  4. C++编码注意事项

    1. vector,string不能按位赋值(vector用push_back, string用重载"+"号)

  5. Constant width to height ratio

    <div class="constant-width-to-height-ratio"></div> .constant-width-to-height-r ...

  6. 密码破解-john的使用

    john类似于hashcat一样,也是一款密码破解方式,john跟专注于系统密码的破解,并且和hashcat一样在kali中自带 hash请见hash的简单使用 重要的参数 --wordlist=字典 ...

  7. 在不使用SQL过程化编程的情况下,实现一个条件结构【SQL149 根据指定记录是否存在输出不同情况】

    题目地址 https://www.nowcoder.com/practice/f72d3fc27dc14f3aae76ee9823ccca6b 思路 加了3列标记位,来达成目的.不直观而且占用内存,但 ...

  8. 如果您喜欢我的博客可以进行RSS订阅

    如果喜欢我的博客,你也可以订阅我的博客 http://www.cnblogs.com/yhm138/rss 有时间的话我会写一篇菜鸟玩转RSS的介绍,或者你看这篇推送 2020-12-15填坑 我理解 ...

  9. 【牛客小白月赛69】题解与分析A-F【蛋挞】【玩具】【开题顺序】【旅游】【等腰三角形(easy)】【等腰三角形(hard)】

    比赛传送门:https://ac.nowcoder.com/acm/contest/52441 感觉整体难度有点偏大. 作者:Eriktse 简介:19岁,211计算机在读,现役ACM银牌选手力争以通 ...

  10. abp(net core)+easyui+efcore实现仓储管理系统——ABP升级7.3上(五十八)

    Abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统--ABP总体介绍(一) abp(net core)+ ...