#4012. 找边界(find)

找边界(find)

问题描述

一些闭合的折线(这些折线可能相交)将平面分成一些区域。其中有个区域是没有边界的—就是折线的外部区域。所有的有边界的区域和折线本身构成了内部区域(图中的阴影部分)。内部区域的边界也是一个折线(图中的粗线)。你的任务就是找到给定折线的边界。

在确立了起始点以后,为了保证解的唯一,我们要求输出满足:

  • 不会出现两条线段相交(有公共的端点除外)。
  • 相邻的两个节点不重合。
  • 相邻的两条边不在同一条直线上。
  • 当你沿着边界前进时,内部区域总是在你的左边。
  • 起始点为横坐标最小的点,若这样的点不止一个,则选其中纵坐标最小的点。

输入格式

输入文件的第一行包含一个整数n—在原折线中的节点数。以下的n行,每行有两个整数xiyix_i,y_i,表示该点的坐标。所有的点都是不同的并且没有三点共线的情况。所有的相临边不在同一条直线上。

输出格式

输出文件第一行是整数m——边界上的点数。以下的m行都是点的坐标。所有的坐标精确到小数点后4位。

样例

10
4 9
9 9
12 4
10 2
9 5
14 10
14 5
10 9
11 4
4 4
13
4.0000 4.0000
9.3333 4.0000
10.0000 2.0000
12.0000 4.0000
10.5000 6.5000
11.5000 7.5000
14.0000 5.0000
14.0000 10.0000
11.5000 7.5000
10.0000 9.0000
10.5000 6.5000
9.0000 9.0000
4.0000 9.0000

数据范围

  • 3n1003≤n≤100
  • 0xiyi1000≤x_i,y_i≤100

来源

  • 信息学奥赛之数学一本通
  • stong9070整理