首页 > 其他分享 >2024-01-20:用go语言,小扣在探索丛林的过程中,无意间发现了传说中“落寞的黄金之都“, 而在这片建筑废墟的地带中,小扣使用探测仪监测到了存在某种带有「祝福」效果的力场, 经过不断的勘测记录,

2024-01-20:用go语言,小扣在探索丛林的过程中,无意间发现了传说中“落寞的黄金之都“, 而在这片建筑废墟的地带中,小扣使用探测仪监测到了存在某种带有「祝福」效果的力场, 经过不断的勘测记录,

时间:2024-01-20 14:11:59浏览次数:33  
标签:01 力场 小扣 forceField xs go diff ys

2024-01-20:用go语言,小扣在探索丛林的过程中,无意间发现了传说中"落寞的黄金之都",

而在这片建筑废墟的地带中,小扣使用探测仪监测到了存在某种带有「祝福」效果的力场,

经过不断的勘测记录,小扣将所有力场的分布都记录了下来,

forceField[i] = [x,y,side] ,

表示第 i 片力场将覆盖以坐标 (x,y) 为中心,边长为 side 的正方形区域。

若任意一点的 力场强度 等于覆盖该点的力场数量。

请求出在这片地带中 力场强度 最强处的 力场强度。

注意:力场范围的边缘同样被力场覆盖。

输入: forceField = [[0,0,1],[1,0,1]]。

输出:2。

来自lc的LCP 74. 最强祝福力场。

答案2024-01-20:

来自左程云

灵捷3.5

大体过程如下:

1.定义一个变量n表示力场数量,初始化为forceField的长度。

2.创建两个空数组xsys,长度为n*2,用于存储力场覆盖区域的边界坐标。

3.遍历forceField,对于每个力场,将其中心坐标以及边长转换成边界坐标,并保存到xsys中。

4.对xsys进行排序。

5.去除xsys中的重复元素,并分别记录剩余元素的数量,得到sizexsizey

6.创建二维数组diff,大小为(sizex+2) x (sizey+2),用于记录每个力场的覆盖数量。

7.遍历forceField,对于每个力场,找到其在xsys中对应的边界索引,并根据索引更新diff数组。

8.初始化变量ans为0,用于记录最大的力场强度。

9.使用动态规划的思想,从diff[1][1]开始遍历diff数组,依次计算每个位置的力场强度,并更新ans

10.返回ans作为最大的力场强度。

总的时间复杂度:O(nlogn),其中n为力场数量,排序的时间复杂度为O(nlogn)。

总的额外空间复杂度:O(n),存储了xsys数组。

go完整代码如下:

package main

import (
	"fmt"
	"sort"
)

func fieldOfGreatestBlessing(forceField [][]int) int {
	n := len(forceField)
	xs := make([]int64, n*2)
	ys := make([]int64, n*2)
	for i := 0; i < n; i++ {
		x := int64(forceField[i][0])
		y := int64(forceField[i][1])
		r := int64(forceField[i][2])
		xs[i*2] = (x << 1) - r
		xs[i*2+1] = (x << 1) + r
		ys[i*2] = (y << 1) - r
		ys[i*2+1] = (y << 1) + r
	}
	sort.Slice(xs, func(i, j int) bool { return xs[i] < xs[j] })
	sort.Slice(ys, func(i, j int) bool { return ys[i] < ys[j] })
	sizex := removeDuplicates(xs)
	sizey := removeDuplicates(ys)
	diff := make([][]int, sizex+2)
	for i := range diff {
		diff[i] = make([]int, sizey+2)
	}
	for i := 0; i < n; i++ {
		x := int64(forceField[i][0])
		y := int64(forceField[i][1])
		r := int64(forceField[i][2])
		a := binarySearch(xs, (x<<1)-r)
		b := binarySearch(ys, (y<<1)-r)
		c := binarySearch(xs, (x<<1)+r)
		d := binarySearch(ys, (y<<1)+r)
		set(diff, a, b, c, d)
	}
	ans := 0
	for i := 1; i < len(diff); i++ {
		for j := 1; j < len(diff[0]); j++ {
			diff[i][j] += diff[i-1][j] + diff[i][j-1] - diff[i-1][j-1]
			ans = max(ans, diff[i][j])
		}
	}
	return ans
}

func removeDuplicates(nums []int64) int {
	size := 1
	for i := 1; i < len(nums); i++ {
		if nums[i] != nums[size-1] {
			nums[size] = nums[i]
			size++
		}
	}
	return size
}

func binarySearch(nums []int64, v int64) int {
	l, r := 0, len(nums)-1
	var m, ans int
	for l <= r {
		m = (l + r) / 2
		if nums[m] >= v {
			ans = m
			r = m - 1
		} else {
			l = m + 1
		}
	}
	return ans + 1
}

func set(diff [][]int, a, b, c, d int) {
	diff[a][b] += 1
	diff[c+1][d+1] += 1
	diff[c+1][b] -= 1
	diff[a][d+1] -= 1
}

func max(a, b int) int {
	if a > b {
		return a
	}
	return b
}

func main() {
	forceField := [][]int{{0, 0, 1}, {1, 0, 1}}
	result := fieldOfGreatestBlessing(forceField)
	fmt.Println(result)
}

在这里插入图片描述

标签:01,力场,小扣,forceField,xs,go,diff,ys
From: https://www.cnblogs.com/moonfdd/p/17976418

相关文章

  • go-计算器
    为了实践一下go语言,弄一个+-*/和有小括号的计算器,其中小括号的嵌套可以任意多个。代码如下:packagemainimport( "fmt" "regexp" "sort" "strconv" "strings")funcmain(){ str:="6-4*(1+(2*((3+4)*2)+2)-(9-5*4)*2)-(2*3-(2+5+3-2*2))+6&......
  • Go中的整数到字符串的转换
    在Go语言中,我们经常需要将整数转换为字符串。然而,直接使用string()函数进行转换可能会导致意想不到的结果。这是因为string()函数会将整数解释为Unicode字符的代码点,而不是将其转换为对应的数字字符串。错误的转换方式例如,如果我们尝试将整数65转换为字符串:s := stri......
  • 题解 P6226 [BalticOI 2019 Day1] 潜艇
    【洛谷博客】题解P6226[BalticOI2019Day1]潜艇题意很清楚,忽略。分析看到这种字符串题很容易想到直接广度优先搜索,复杂度\(O(rc4^m)\)。很显然承受不了,所以考虑DP。状态设计设\(f_{i,x,y}\)表示执行完前\(i\)个操作后位置\((x,y)\)能否作为终点。设命令字符......
  • 20240119方程图像研究
    事情起因:研究人员:csj、lqy、xzq、yjf方程图像研究要求:描点法画图(使用卡西欧),在\(x\)轴上任取值,对于给定\(x_0\),应在有限时间内求出所有对应的\(y\)。草图绘制(直接绘制):综合方程性质(如定义域、单调性、对称性),明确区间单调性及端点,利用对称性作图、或化归为已知方程并求出其......
  • GYM102596L Yosupo's Algorithm【分治,支配对】
    给定平面上\(2n\)个点,每个点有坐标\((x_i,y_i)\),权值\(w_i\)及颜色\(c_i\)。所有点满足:若\(c_i=0\),则\(x_i<0\);若\(c_i=1\),则\(x_i>0\)。\(q\)次查询,每次给定\(L_i,R_i\),你需要选择两个点\(i,j\)满足如下条件:\(c_i=0,c_j=1\)。\(x_i<L,x_j>R\)或\(x_......
  • 2024-01-19
    1.排列数字,深度遍历importjava.util.Scanner;publicclassMain{staticintn,N=10;staticint[]path=newint[N];staticboolean[]st=newboolean[N];//用来标志数字有没有被排列过publicstaticvoiddfs(intu,intn){//因为......
  • Petrozavodsk Summer 2019. Day 9. MEX Foundation Contest【杂题】
    比赛链接A.TheOnePolynomialMan给定模数\(p\)和\(0\simp-1\)的两个集合\(U,V\),求有多少个有序对\((a,b)\)满足:\(f(a,b)=\prod\limits_{z\inV}\left(\frac{(2a+3b)^2+5a^2}{(3a+b)^2}+\frac{(2a+5b)^2+3b^2}{(3a+2b)^2}-z\right)\equiv0\pmo......
  • 2024-01-20(今日动态)
    1.安装PyCharm:https://blog.csdn.net/m0_46374969/article/details/131292897。2.安装PyQT5可视化的QT5Designer界面:https://zhuanlan.zhihu.com/p/653664303。https://www.jb51.net/python/2873999dc.htm。 3.(问题现象):Smart-Plane的T8U6无法烧录程序。(解决):终极原因:SCL和SWD......
  • shopify URL如何实现301跳转以及验证方法
    需要APP:TinyIMG步骤:1、在shopify后台打开插件“TinyImg”2、点击“改善SEO”,然后再点击“停止因链接断开而失去销售”3、点击“创建URL”重定向在上图中,按照指示分别填写所对应的URL,即可实现URL的重定向了。如何验证301跳转成功当我们设置URL重定向之后,如何验证其是否成......
  • 算法模板 v1.3.1.20240120
    算法模板v1.1.1.20240115:之前的历史版本已经不可寻,创建了第一份算法模板。v1.2.1.20240116:删除“编译”-“手动开栈”与“编译”-“手动开O优化”;将“编译”-“CF模板”中的第20行代码cin>>T;注释;删除“读写”及其目录下的内容;删除“图论”-“欧拉图”-“混合图”;删除“图论”-......