#P1881. Sail Race

Sail Race

题目描述

大西洋海岸航海俱乐部(ACM)正在开发一个赛程规划工具,用于估算不同比赛航线、风向和帆船类型的比赛时长。比赛航线由最多1010个航标点定义,帆船必须按指定顺序经过所有航标。航标点以直角坐标系中的xxyy坐标标识(单位:11海里),yy轴正方向为正北,xx轴正方向为正东。比赛水域开放,无航行限制。

在该规划工具中,风力是控制帆船的唯一驱动力,决定了帆船的航行速度和方向限制。比赛期间风向和风速恒定,风向以罗盘方位角表示(000.0°000.0°为正北,顺时针增加),风速单位为节(ktskts)。

帆船航行方向与风向的夹角不得小于给定的"迎风角"(point angle)。为接近目标方向,帆船需以之字形航行,且每次转向或经过航标点都会产生转向罚时。在模拟中,帆船将以最少转向次数和最短距离完成每个航段(相邻航标点间的航程)。

帆船速度由船型设计、风速及航行方向与风向的夹角共同决定。例如当风向为45°45°、迎风角为40°40°时,帆船不能选择5°85°85°之间的航向(因无法如此接近风向航行)。 航行角度定义为帆船航行方向与来风方向的最小夹角。 本问题中,帆船速度与风速的比值根据该夹角大小分为以下三种情况:

| 夹角范围                          | 采用的速度比 |
|----------------------------------|--------------|
| ≥迎风角且<前侧风角                | 迎风速度比    |
| ≥前侧风角且<顺风角                | 前侧风速度比  |
| ≥顺风角                          | 顺风速度比    |

例如:当帆船航行方向与风向的夹角θ满足θreachθ<θdownwindθ_{reach} ≤ θ < θ_{downwind}时,船速计算公式为:

vboat=rreach×vwindv_{boat} = r_{reach} × v_{wind}

输入格式

每组数据包含:

  1. 首行4个参数:风向(实)、风速(实)、转向罚时(实)、航标数nn(整)
  2. 第二行6个参数:迎风角、迎风速度比、前侧风角、前侧风速度比、顺风角、顺风速度比
  3. 后续nn行:每行包含2字符航标ID及其xx,yy坐标 输入以四个0结束

输出格式

每组数据输出:

  1. 数据组编号及航段数
  2. 航线总长度(连续航标点间距之和)
  3. 每个航段信息:
    • 航段编号、起止航标ID、航向角(0.1°精度)、距离(0.01nm精度)
    • 转向详情(转向编号、航速(0.1kts)、航向角、航程)
  4. 汇总信息:
    • 总转向次数
    • 总航行距离
    • 预计比赛时长(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