2022-03-17:所有黑洞的中心点记录在holes数组里,
比如[[3,5] [6,9]]表示,第一个黑洞在(3,5),第二个黑洞在(6,9),
并且所有黑洞的中心点都在左下角(0,0),右上角(x,y)的区域里,
飞船一旦开始进入黑洞,就会被吸进黑洞里。
返回如果统一所有黑洞的半径,最大半径是多少,
依然能保证飞船从(0,0)能到达(x,y)。
来自美团。

答案2022-03-17:

二分答案+并查集。

代码用golang编写。代码如下:

package main

import (
"fmt"
"math"
) func main() {
holes := [][]int{{3, 5}, {6, 9}}
x := 11
y := 11
fmt.Println(maxRadius(holes, x, y))
} func maxRadius(holes [][]int, x, y int) int {
L := 1
R := getMax(x, y)
ans := 0
for L <= R {
M := (L + R) / 2
if ok(holes, M, x, y) {
ans = M
L = M + 1
} else {
R = M - 1
}
}
return ans
} func getMax(a, b int) int {
if a > b {
return a
} else {
return b
}
} func ok(holes [][]int, r, x, y int) bool {
n := len(holes)
uf := NewUnionFind(holes, n, r)
for i := 0; i < n; i++ {
for j := i; j < n; j++ {
if touch(holes[i][0], holes[i][1], holes[j][0], holes[j][1], r) {
uf.union(i, j)
}
if uf.block(i, x, y) {
return false
}
}
}
return true
} func touch(x1, y1, x2, y2, r int) bool {
return (r<<1)*(r<<1) < abs(x1-x2)*abs(x1-x2)+abs(y1-y2)*abs(y1-y2)
//return (r << 1) >= sqrt(abs(x1-x2)*abs(x1-x2)+abs(y1-y2)*abs(y1-y2))
} func abs(a int) int {
if a < 0 {
return -a
} else {
return a
}
} func sqrt(a int) int {
return int(math.Sqrt(float64(a)))
} type UnionFind struct {
father []int
size []int
xmin []int
xmax []int
ymin []int
ymax []int
help []int
} func NewUnionFind(holes [][]int, n, r int) *UnionFind {
ans := &UnionFind{}
ans.father = make([]int, n)
ans.size = make([]int, n)
ans.xmin = make([]int, n)
ans.xmax = make([]int, n)
ans.ymin = make([]int, n)
ans.ymax = make([]int, n)
ans.help = make([]int, n)
for i := 0; i < n; i++ {
ans.father[i] = i
ans.size[i] = 1
ans.xmin[i] = holes[i][0] - r
ans.xmax[i] = holes[i][0] + r
ans.ymin[i] = holes[i][1] - r
ans.ymax[i] = holes[i][1] + r
}
return ans
} func (this *UnionFind) find(i int) int {
hi := 0
for i != this.father[i] {
this.help[hi] = i
hi++
i = this.father[i]
}
for hi--; hi >= 0; hi-- {
this.father[this.help[hi]] = i
}
return i
} func (this *UnionFind) union(i, j int) {
fatheri := this.find(i)
fatherj := this.find(j)
if fatheri != fatherj {
sizei := this.size[fatheri]
sizej := this.size[fatherj]
big := twoSelectOne(sizei >= sizej, fatheri, fatherj)
small := twoSelectOne(big == fatheri, fatherj, fatheri)
this.father[small] = big
this.size[big] = sizei + sizej
this.xmin[big] = getMin(this.xmin[big], this.xmin[small])
this.xmax[big] = getMax(this.xmax[big], this.xmax[small])
this.ymin[big] = getMin(this.ymin[big], this.ymin[small])
this.ymax[big] = getMax(this.ymax[big], this.ymax[small])
}
} func getMin(a, b int) int {
if a < b {
return a
} else {
return b
}
} func twoSelectOne(c bool, a, b int) int {
if c {
return a
} else {
return b
}
} func (this *UnionFind) block(i, x, y int) bool {
i = this.find(i)
return (this.xmin[i] <= 0 && this.xmax[i] >= x) ||
(this.ymin[i] <= 0 && this.ymax[i] >= y) ||
(this.xmin[i] <= 0 && this.ymin[i] <= 0) ||
(this.xmax[i] >= x && this.ymax[i] >= y)
}

执行结果如下:


左神java代码

2022-03-17:所有黑洞的中心点记录在holes数组里, 比如[[3,5] [6,9]]表示,第一个黑洞在(3,5),第二个黑洞在(6,9), 并且所有黑洞的中心点都在左下角(0,0),右上角(的更多相关文章

  1. Spring Boot 3.0.0 发布第一个里程碑版本M1,你的 Java 升到17 了吗?

    2022年1月20日,Spring官方发布了Spring Boot 3.0.0的第一个里程碑版本M1. 下面一起来来看看Spring Boot 3.0.0 M1版本都有哪些重大变化: Java基线从 ...

  2. Docker 在转发端口时的这个错误Error starting userland proxy: mkdir /port/tcp:0.0.0.0:3306:tcp:172.17.0.2:3306: input/output error.

    from:https://www.v2ex.com/amp/t/463719 系统环境是 Windows 10 Pro,Docker 版本 18.03.1-ce,电脑开机之后第一次运行 docker ...

  3. Spark详解(03) - Spark3.0.0运行环境安装

    Spark详解(03) - Spark3.0.0运行环境安装 Spark运行模式 Spark常见部署模式: Local模式:在本地部署单个Spark服务 所谓的Local模式,就是不需要其他任何节点资 ...

  4. linux下使用localhost和127.0.0.1都不能连接的解决思路

    linux下刚安装了mysql,尝试写了程序连接mysql,出现了只有用本地ip地址才能连接,而127.0.0.1和localhost都不能访问 解决这个问题主要查看3个方向 .hosts中是否有ip ...

  5. MySQL 8.0.0 版本发布,亮点都在这了!

    导读 MySQL是一个开放源码的小型关联式数据库管理系统,开发者为瑞典MySQL AB公司.目前MySQL被广泛地应用在Internet上的中小型网站中.由于其体积小.速度快.总体拥有成本低,尤其是开 ...

  6. 记录:mac的浏览器访问任何域名、网址都跳转到本地127.0.0.1或固定网址

    新年上班第一天,刚开机就遇到了个小坑,问题是这样,打开浏览器,输入任何网址都跳转到本地的一个项目,该项目在本地Apache配置下,监听的端口是8888,本机访问的形式是127.0.0.1:8888. ...

  7. This Android SDK requires Android Developer Toolkit version 17.0.0 or above. Current version is 10.0.0.v201102162101-104271. Please update ADT to the latest version.

    win7/xp 下面安装Android虚拟机,更新SDK后,在Eclipse preference里指向android-sdk-windows时. 出现 : This Android SDK requ ...

  8. iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 8001 -j DNAT --to-destination 172.17.0.5:8080 ! -i docker0: iptables: No chain/target/match by that name.

    在docker容器上部署项目后,启动docker容器,出现 iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dpor ...

  9. mybatis insert update delete返回都是整型 0,1,增,删,改要提交事物

    mybatis insert update delete返回都是整型 0,1, 没有扔 增,删,改要提交事物

  10. iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 3306 -j DNAT --to-destination 172.17.0.2:3306 ! -i docker0: iptables: No chain/target/match by that name

    今天使用docker运行mysql时报错, 执行命令: docker run --restart=always --name mysql5.7 -p 3306:3306 -v /data/mysql/ ...

随机推荐

  1. 【Flutter】环境搭建(Windows+Android Studio 3.6.1)

    最近参加的项目需要用到Flutter框架进行iOS/Android双端开发,然而第一步环境搭建的过程就忙活了一整个晚上,直到现在终于有时间静下心来整理一下搭建过程中遇到的困难. 0x00 Flutte ...

  2. Repeater 绑定数据如何根据数据列的内容排序

    可指定Repeater的数据源 从数据库查询时直接排序,而后绑定数据这样

  3. ElasticSearch 实现分词全文检索 - match、match_all、multimatch查询

    目录 ElasticSearch 实现分词全文检索 - 概述 ElasticSearch 实现分词全文检索 - ES.Kibana.IK安装 ElasticSearch 实现分词全文检索 - Rest ...

  4. 基于声网 Flutter SDK 实现互动直播

    前言 互动直播是实现很多热门场景的基础,例如直播带货.秀场直播,还有类似抖音的直播 PK等.本文是由声网社区的开发者"小猿"撰写的Flutter基础教程系列中的第二篇,他将带着大家 ...

  5. 设计师必备:免费素材管理工具Billfish v3.0更新了!

    ​​Billfish是专门为设计师打造的图片收藏管理工具,可以轻松管理您的各种素材文件.Billfish是一个免费的软件,支持对大量的图片素材进行管理,提供多种快速的检索筛选功能,如颜色,格式,方向, ...

  6. Go语言:通过TDD驱动测试开发为同事写的程序优化提速——初次接触并发与channel

    正文: 假如同事已经写了一个 CheckWebsites 的函数检查 URL 列表的状态. package concurrency type WebsiteChecker func(string) b ...

  7. 怎么在php7项目中安装event扩展

    今天就跟大家聊聊有关怎么在php7项目中安装event扩展,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获. 安装支持库libevent wget ...

  8. Python爬虫基础教程2

    beautifulsoup4介绍/遍历文档树 bs4 > 从html或xml文件中提取的python库 用它来解析爬取回来的xml 安装:pip install beautifulsoup4 p ...

  9. 必知必会的 WebSocket 协议

    文章介绍 WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,它的出现使客户端和服务器之间的数据交换变得更加简单.WebSocket 通常被应用在实时性要求较高的场景,例如赛事数据. ...

  10. uniApp安卓离线SDK运行

    一.下载uniapp提供的离线SDK包 下载地址:https://nativesupport.dcloud.net.cn/AppDocs/download/android 版本:2022年09月26日 ...