这是2010年太平洋ACM-ICPC比赛中出现的问题。其重点是尝试找到一种方法,将三角形内一组点分成三个子三角形,使得每个分区恰好包含三分之一的点。
输入:
- 一个边框三角形的坐标:
(v1x,v1y),(v2x,v2y),(v3x,v3y)
- 一个数字
3n < 30000
,代表位于三角形内的点数 3n
个点的坐标:(x_i,y_i)
,其中i=1...3n
输出:
- 一个点
(sx,sy)
,将三角形分为三个子三角形,使得每个子三角形恰好包含n
个点。
分裂点分割边界三角形成子三角形的方式如下:从分裂点向三个顶点绘制一条线。这将把三角形分成3个子三角形。
我们保证这样的点存在。任何这样的点都可以(答案不一定唯一)。
这里是n=2
(6个点)问题的示例。我们给出每个彩色点的坐标以及大三角形每个顶点的坐标。分裂点用灰色圆圈标出。
有人能提出比O(n ^ 2)
更快的算法吗?