Convex Hull Finding
题意翻译
**题目描述**
现在给你一个单连通轮廓,这是凸或非凸(凹)的形状,使用任何算法找到它的凸壳,即最小的凸轮廓包围给定的形状。如果给定的轮廓是凸的,那么它的凸包就是原始轮廓本身。形状的最大尺寸为512x512,形状的最大顶点数为512。现在请优秀的你编写一个程序来实现你的完美无瑕的算法。
**输入格式**
在X-Y笛卡尔平面中,顶点的顺序是逆时针的(如果你考虑显示窗口的原点在左上角,那么顶点的方向是顺时针的),并且没有一个相邻的顶点是共线性的。由于所有的形状都是封闭的轮廓,所以说,最后一个顶点应该与第一个点相同。在一个给定的文件中有几组数据。负数“-1”用于分隔每一组数据。
| 行号 | 文件中的数据 | 解释 |
| -----------: | :----------- | :----------- |
| 1 | K | 文件中的数据个数 |
| 2 | N | 第一个形状的顶点个数 |
| 3 | X₁ , Y₁ | 第一个点的坐标 |
| 4 | X₂ , Y₂ | 第二个点的坐标 |
| … | | |
| N+2 | Xn , Yn | 第N个点的坐标 |
| N+3 | -1 | 数据分割标志 |
| N+4 | M | 第二个形状的顶点个数 |
| N+5 | X₁ , Y₁ | 第一个点的坐标 |
| … | | |
**注意:** 行号、文件中的数据和说明没有在文件中给出。这里显示它们只是为了帮助您阅读数据。
第一个数据的轮廓形状及其凸包如下图所示
![第一个数据集的轮廓形状及其凸包](https://cdn.luogu.com.cn/upload/image_hosting/omtr5j4x.png?x-oss-process=image/resize,m_lfit,h_170,w_225)
**输出格式**
输出所有输入形状的凸包(就是将凸包的各个顶点输出),**记得输出-1**。另外,Y值最小的顶点应该是第一个点,如果有相同Y值的点,那么在这些点中最小的X值应该是首个点。
题目描述
[problemUrl]: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=8&page=show_problem&problem=622
[PDF](https://uva.onlinejudge.org/external/6/p681.pdf)
![](https://cdn.luogu.com.cn/upload/vjudge_pic/UVA681/4aa7a8eeb706b263ca91acbaadfb7aa437160df1.png)
输入输出格式
输入格式
![](https://cdn.luogu.com.cn/upload/vjudge_pic/UVA681/0cfb4febd26012824553f71f2e61ee4204c9146e.png)
输出格式
![](https://cdn.luogu.com.cn/upload/vjudge_pic/UVA681/94ec618fd5cd3a8624d4e9cc85cd9ae689020d63.png)
输入输出样例
输入样例 #1
3
15
30 30
50 60
60 20
70 45
86 39
112 60
200 113
250 50
300 200
130 240
76 150
47 76
36 40
33 35
30 30
-1
12
50 60
60 20
70 45
100 70
125 90
200 113
250 140
180 170
105 140
79 140
60 85
50 60
-1
6
60 20
250 140
180 170
79 140
50 60
60 20
3
8
60 20
250 50
300 200
130 240
76 150
47 76
30 30
60 20
-1
6
60 20
250 140
180 170
79 140
50 60
60 20
-1
6
60 20
250 140
180 170
79 140
50 60
60 20
输出样例 #1