塔防危险度计算

问题描述:

格点平面上有一些塔,对于平面的每一个点,其危险度定义为曼哈顿距离为d的范围内的塔的数量,求危险度最低的点。

说明:

曼哈顿距离:d=|X1-X2|+|Y1-Y2|。(x1,y1)->(x2,y2)的距离
则对于某点(i,j),距离其曼哈顿距离为d的点形成一个菱形。
塔防危险度计算_第1张图片

解析:

塔防危险度计算_第2张图片
1. 我们可以对平面上的某个点(i,j)进行对换,可得到:
2. 定义一个二维数组sum[i][j],表示从(0,0)-> (i,j)的塔的个数,可以得到递推方程:sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]。
3. 定义一个二维数组res[i][j]表示点(i,j)的危险度,res[i][j]=sum[i+sqrt(2)/2][j+sqrt(2)/2]-sum[i+sqrt(2)/2][[j-sqrt(2)/2]]-sum[i-sqrt(2)/2][j+sqrt(2)/2]+sum[i-sqrt(2)/2][j-sqrt(2)/2]
4. 遍历二维数组res,获取最小值,对换回原坐标

综上所述:O(n^2)

你可能感兴趣的:(塔防危险度计算)