题解:P16293 [蓝桥杯 2026 省 Java A 组] 奇怪的地图

· · 题解

这道题的核心是六边形网格的距离公式,再结合高效求最大值的方法。

核心

不难得出:

对于六边形网格上两点:

A(x_1,y_1) B(x_2,y_2)

dx=x_1−x_2dy=y_1−y_2

两点距离公式:

S=\frac{|dx|+|dy|+|dx−dy|}{2}

这个公式是核心。

代入 s=−x−y

化简:

\begin{aligned} S &=\frac{|dx|+|dy|+|-dx−dy|}{2}\\ &=\frac{|dx|+|dy|+|dx+dy|}{2} \end{aligned}

我们可以把公式整理成更直观的形式:

S=\max(|dx|,|dy|,|dx−dy|)

观察距离公式:

S=\max(|x_1−x_2|,|y_1−y_2|,|(x_1−y_1)−(x _2−y_2)|)

要让这个值最大,只需要求 3 组值的全局最大差值:

$y$ 的最大值减去 $y$ 的最小值。 $(x−y)$ 的最大值减去 $(x−y)$ 的最小值。 **最终答案就是这 $3$ 个值里的最大值。** ## 最后: **祝大家在蓝桥杯中取得好成绩!!!**