首页 > 试题广场 >

车道线大师

[编程题]车道线大师
  • 热度指数:18 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
小林最近打算标一组车道线地图,他认真阅读了地图可视化工具的对应接口,发现只要自己提供一组有序的点(Node)的坐标,工具就会依次连线画出一条车道线。
每一组点的首尾两点也被称作连接点(Connector),相邻车道的连接点的连线被称为连接线,输入有一组有序的连接点,工具就会依次连线画出一条连接线。
其中,连接线总是与车道线在该处的切线方向垂直。
他还发现,车道线的方向(汽车行驶的方向)也和这组点的排序方式以及对应连接点的排序方式有关:
设Pt是车道线最后一个点的坐标,Ph是车道线第一个点的坐标,Qt是连接线最后一个点的坐标,Qh是连接线第一个点的坐标,
则需满足对应连线形成的两个向量的叉积大于0
小林现在手头有的是一系列无序的坐标点的世界坐标(x,y)以及世界坐标下的朝向角(alpha),他想写一个函数,能将这些数据重新排序,使其满足上述的条件,
能够被地图可视化工具接受,请你帮帮他吧。

输入描述:
每个测试用例的第一行包含一个正整数N和正整数M,N代表车道线的数量,M代表每一条车道线上Node的数量。
接下来的N行,包含M个无序的坐标点(id, x, y, alpha),分别代表点的id,x坐标,y坐标,朝向角


输出描述:
对于每组测试用例,输出N+2行结果,前N行表示对应的车道线Node排序后的结果,后两行分别表示该组车道线首尾的连接线上Node排序后的结果,使其能被地图可视化工具成功绘制,只需输出id即可
示例1

输入

2 3
1 0 0 0 2 10 0 0 3 5 0 0
4 0 3.75 0 5 2 3.75 0 6 10 3.75 0

输出

1 3 2
4 5 6
4 1
6 2
头像 努力学习前端ing^_^
发表于 2022-08-01 18:55:12
两次排序得到结果 const [n, m] = readline().split(' ').map(Number); // arr: n * m * 4 let arr = []; // id: n * m const id = []; for (let i = 0; i < n; i++) 展开全文

热门推荐

通过挑战的用户