#P2412. Equidistance
Equidistance
描述
Alice 和 Bob 已经有一段时间没有见面了。鲍勃对此不太高兴,所以他敦促爱丽丝终于抽出时间开会。让我们听听一次电话的摘录:
爱丽丝:。。。也许我们应该在中立的领土上见面。
Bob:两年前---我已经从你那里听说过这件事。
爱丽丝:我知道;我只是还没有找到一个合适的地方,它离你我家的距离大致相同。
Bob:嗯,球体表面(地球是球体而不是圆盘)上与两个给定点等距的点的几何位置是一个大圆(即在大圆的中心通过给定点正交相交的圆)。不过,如果你只坚持大致相等的距离,我们会得到一个大约几公里宽、大约 40000 公里长的区域。这个区域并非一切都是水。因此,我认为找到合适的地方是一项可行的任务。
爱丽丝: 现在,如果我让你选一个,我们肯定会降落在檀香山。
Bob:这还不错。那么,我可以选择任何一个吗?
Alice:只要我不必接受---但我愿意接受建议。
鲍勃:檀香山?
Alice:它是否位于上述几何位置??!
鲍勃:不完全是......
好。现在让我们停止初步工作,来了解事实:给定地球表面上的两个位置,你可以找到表面上所有等距点的几何位置。对于另一个给定位置,计算它在表面上到此几何位置的距离。假设地球是一个半径为 6378 km 的球体。
输入
输入由两部分组成:位置列表和查询列表。
位置列表最多包含 100 行,每个位置一行。每个都包含一个字符串和两个浮点数,用空格分隔,表示位置的名称、纬度和经度。名称是唯一的,长度少于 30 个字符,并且不包含空格。纬度介于 -90(南极)和 90(北极)之间(包括 -90 和 90 (北极)。经度介于 -180 和 180 之间(含 -180 和 180 之间),其中负数表示子午线以西的位置,正数表示子午线以东的位置。(子午线穿过伦敦格林威治。位置列表由由单个 “#” 组成的行终止。
查询列表中的每一行都包含三个位置名称。您可以假设第一个位置是 Alice 的家,第二个位置是 Bob 的家,第三个位置是可能的交汇点。查询列表由由单个 “#” 组成的行终止。
输出
对于每个查询,输出一行“M is x km off A/B equidistance.”,其中 M,x,A,B 适当地替换为位置名称,并将计算的距离四舍五入到最接近的整数。
如果查询中的某个位置未出现在位置列表中,请打印 “?” 而不是 distance。
输入数据 1
Ulm 48.700 10.500
Freiburg 47.700 9.500
Philadelphia 39.883 -75.250
SanJose 37.366 -121.933
Atlanta 33 -84
Eindhoven 52 6
Orlando 28 -82
Vancouver 49 -123
Honolulu 22 -157
NorthPole 90 0
SouthPole -90 0
#
Ulm Freiburg Philadelphia
SanJose Atlanta Eindhoven
Orlando Vancouver Honolulu
NorthPole SouthPole NorthPole
Ulm SanDiego Orlando
NorthPole SouthPole SouthPole
Ulm Honolulu SouthPole
#
输出数据 1
Philadelphia is 690 km off Ulm/Freiburg equidistance.
Eindhoven is 3117 km off SanJose/Atlanta equidistance.
Honolulu is 4251 km off Orlando/Vancouver equidistance.
NorthPole is 10019 km off NorthPole/SouthPole equidistance.
Orlando is ? km off Ulm/SanDiego equidistance.
SouthPole is 10019 km off NorthPole/SouthPole equidistance.
SouthPole is 1494 km off Ulm/Honolulu equidistance.