FindPolygons

作者 : 翁伊嘉

关键词 : 数学,勾股定理,暴力

题目简述

输入整数,在平面直角坐标系中找出一个多边形,满足:

  • 顶点均在整点上
  • 周长恰为
  • 边数尽量少
  • 在满足以上条件的前提下,最长边与最短边长度之差尽量小

输出其最长边与最短边长度之差。

分析

能够发现以下性质:

每条边的长度均为整数

由于每条边的两个端点都在整点上,每条边的长度都是的形式,其中是整数。 可以证明,若中,存在为无理数,也不可能为有理数。 在这里可以找到具体的证明。

为奇数时不存在满足条件的多边形

由于每条边的长度都是整数,为奇数时,存在奇数条边的长度为奇数。

对于一条边,设它的两个端点分别为,根据勾股定理,边长满足

为奇数,则中恰有一个为奇数。即,从点走到点, 所在点的纵横坐标之和的奇偶性发生变化。

为偶数,则的奇偶性相同,因此走一条长度为偶数的边,所在点的纵横坐标之和的奇偶性不发生变化。

从多边形的一个顶点出发,沿着所有边走一遍走回这个顶点。若经过了奇数条长度为奇数的边,的奇偶性应当发生变化。但是实际上,由于回到了同一个点,的奇偶性不变。于是,为奇数时不存在满足条件的多边形。

时无解

为偶数时,一定可以找到满足条件的矩形,即所求多边形的边数不超过

令矩形的一边为, 另一边为,就得到了一个满足条件的矩形。

能被整除时,可以找到一个满足条件的正方形,最长边最短边长度之差为。否则,长度之差最小可以为

接下来,只要对于为偶数的情况,验证是否存在满足条件的三角形,并在所有这样的三角形中取最长边最短边长度之差最小的一个。

算法一

无论三角形的形状如何,都可以通过平移/轴对称,令它的一个顶点与原点重合,剩下两个顶点位于第一象限内/轴正半轴上/轴正半轴上。

考虑枚举剩下两个顶点的位置。由于边长需要是整数,第一象限内可供选择的顶点个数只有个。

在这些顶点中枚举剩下两个顶点的位置,判断一下是否能构成周长恰好为的三角形即可。

复杂度

算法二

枚举一个点的位置, 枚举从出发的另一条边的长度,然后计算出第三个顶点的位置,看一下是不是整点。

复杂度

算法三

打表大法,复杂度.

参考资料

SRM599 - TopCoder Wiki

results matching ""

    No results matching ""