提交翻译
查看原帖
提交翻译
181521
珈乐唯毒楼主2021/3/5 22:40

题目描述

寻找一组点的凸包是一个重要的问题,通常是一个更大的问题的一部分。求凸包的算法有很多种。 由于涉及凸包的问题有时会出现在ACM世界总决赛,参赛者了解其中的一些算法是很有必要的。 求平面上一组点的凸包可分为两个子任务。首先,给出一个点集,找到此点集的一个子集,用线段连接,形成一个凸多边形。包含所有原始点,并使其最小。第二,按凸包顶点的顺序,绕多边形逆时针输出。在本题中,第一个子任务已经为您完成,您的程序应该完成第二个子任务。 也就是说,给定已知凸包上的顶点,按照逆时针顺序输出它们。

输入格式

输入的第一行包含一个int类型的测试点数量。 每个测试点的第一行包含一个整数n(3≤n≤100000)表示点数。 以下n行每行描述一个点,包含用空格隔开的两个整数和一个字符“Y”或“N”。这两个整数指定点的x和y坐标。“Y”表示点是凸包的顶点,N表示不是。 各点的x和y坐标应不小于-1000000000且不大于1000000000。没有点会在同一测试点出现多次。测试点中的点永远不会都在一条线上。

输出格式

对于每个测试点,首先输出一行包含一个整数m表示凸包上的顶点数。接下来输出m行,每行描述凸包的一个顶点。每一行都应该包含这个点的x坐标,后跟一个空格,后跟这个点的y坐标。从x坐标最小的点开始,以逆时针旋转。如果有多个这样的点,从y坐标最小的点开始。

2021/3/5 22:40
加载中...