#P1881. Sail Race
Sail Race
题目描述
大西洋海岸航海俱乐部(ACM)正在开发一个赛程规划工具,用于估算不同比赛航线、风向和帆船类型的比赛时长。比赛航线由最多个航标点定义,帆船必须按指定顺序经过所有航标。航标点以直角坐标系中的和坐标标识(单位:海里),轴正方向为正北,轴正方向为正东。比赛水域开放,无航行限制。
在该规划工具中,风力是控制帆船的唯一驱动力,决定了帆船的航行速度和方向限制。比赛期间风向和风速恒定,风向以罗盘方位角表示(为正北,顺时针增加),风速单位为节()。
帆船航行方向与风向的夹角不得小于给定的"迎风角"(point angle)。为接近目标方向,帆船需以之字形航行,且每次转向或经过航标点都会产生转向罚时。在模拟中,帆船将以最少转向次数和最短距离完成每个航段(相邻航标点间的航程)。
帆船速度由船型设计、风速及航行方向与风向的夹角共同决定。例如当风向为、迎风角为时,帆船不能选择至之间的航向(因无法如此接近风向航行)。
航行角度定义为帆船航行方向与来风方向的最小夹角。
本问题中,帆船速度与风速的比值根据该夹角大小分为以下三种情况:
| 夹角范围 | 采用的速度比 |
|----------------------------------|--------------|
| ≥迎风角且<前侧风角 | 迎风速度比 |
| ≥前侧风角且<顺风角 | 前侧风速度比 |
| ≥顺风角 | 顺风速度比 |
例如:当帆船航行方向与风向的夹角θ满足时,船速计算公式为:
输入格式
每组数据包含:
- 首行4个参数:风向(实)、风速(实)、转向罚时(实)、航标数(整)
- 第二行6个参数:迎风角、迎风速度比、前侧风角、前侧风速度比、顺风角、顺风速度比
- 后续行:每行包含2字符航标ID及其,坐标 输入以四个0结束
输出格式
每组数据输出:
- 数据组编号及航段数
- 航线总长度(连续航标点间距之和)
- 每个航段信息:
- 航段编号、起止航标ID、航向角(0.1°精度)、距离(0.01nm精度)
- 转向详情(转向编号、航速(0.1kts)、航向角、航程)
- 汇总信息:
- 总转向次数
- 总航行距离
- 预计比赛时长(0.01小时精度)
- 总转向罚时
所有数值按指定精度输出,格式严格参照样例。数据组间用空行分隔。
输入数据1
45 10 .1 6
45 0.5 90 0.75 135 0.67
M1 15 10
M2 25 20
M3 22 30
M4 5 25
M5 10 15
M6 10 10
0 0 0 0
输出数据1
Race 1 has 5 legs
The race layout is 58.48 nm long
Leg 1 from mark M1 to M2: direction = 45.0, distance = 14.14
Tack 1: speed = 5.0, direction = 90.0, distance = 10.00 nm
Tack 2: speed = 5.0, direction = 0.0, distance = 10.00 nm
Leg 2 from mark M2 to M3: direction = 343.3, distance = 10.44
Tack 3: speed = 5.0, direction = 343.3, distance = 10.44 nm
Leg 3 from mark M3 to M4: direction = 253.6, distance = 17.72
Tack 4: speed = 6.7, direction = 253.6, distance = 17.72 nm
Leg 4 from mark M4 to M5: direction = 153.4, distance = 11.18
Tack 5: speed = 7.5, direction = 153.4, distance = 11.18 nm
Leg 5 from mark M5 to M6: direction = 180.0, distance = 5.00
Tack 6: speed = 6.7, direction = 180.0, distance = 5.00
Race 1 was 64.34 nm long with 6 tacks
Estimated race duration is 11.47 hours with 0.50 hours of tack penalty