#P2254. Globetrotter
Globetrotter
描述
作为ACM编程团队的一员,你将频繁地穿梭于世界各地:苏黎世、费城、圣何塞、亚特兰大……从1999年开始,总决赛每年都会在不同的洲举行,因此某一天你可能会去到日本或澳大利亚。
在比赛现场,了解你距离家乡有多远会是一件有趣的事情。为此,你的任务是编写一个程序,计算地球表面上两个给定位置之间的地理距离。
我们假设地球是一个完美的球体,半径为公里。A和B之间的地理距离是连接A和B的测地线线段的长度。
测地线线段是球体表面上两点之间最短的曲线,完全位于球体表面。
圆周率的值约为。
输入
输入由两部分组成:城市列表和查询列表。
城市列表
- 城市列表最多包含行,每行代表一个城市。
- 每行包含一个字符串和两个实数、,分别表示城市名称、纬度和经度。
- 城市名称长度不超过个字符,且不包含空格。
- 纬度范围在(南极)到(北极)之间。
- 经度范围在到之间,负数表示本初子午线以西,正数表示本初子午线以东(本初子午线穿过英国伦敦的格林尼治)。
- 城市列表以单独的一行
#
结束。
查询列表
- 每行包含两个城市名称和。
- 查询列表以一行
# #
结束。
输出
对于每个查询:
- 输出一行
A - B
,其中和替换为实际的城市名称。 - 如果某个城市未出现在城市列表中,则输出
Unknown
。 - 否则,输出一行
x km
,其中是两个城市之间的地理距离(单位为公里),四舍五入到最近的整数。 - 每个查询结束后输出一个空行。
输入样例 1
Ulm 48.700 10.500
Freiburg 47.700 9.500
Philadelphia 39.883 -75.250
SanJose 37.366 -121.933
NorthPole 90 0
SouthPole -90 0
#
Ulm Philadelphia
Ulm SanJose
Freiburg Philadelphia
Freiburg SanJose
Ulm Freiburg
SanJose Philadelphia
Ulm LasVegas
Ulm Ulm
Ulm NorthPole
Ulm SouthPole
NorthPole SouthPole
# #
输出样例 1
Ulm - Philadelphia
6536 km
Ulm - SanJose
9367 km
Freiburg - Philadelphia
6519 km
Freiburg - SanJose
9412 km
Ulm - Freiburg
134 km
SanJose - Philadelphia
4023 km
Ulm - LasVegas
Unknown
Ulm - Ulm
0 km
Ulm - NorthPole
4597 km
Ulm - SouthPole
15440 km
NorthPole - SouthPole
20037 km
来源
Ulm Local 1997