CF142E Help Greg the Dwarf 2

题目描述

矮人 Greg 最近在 Neverland 山进行挖掘工作非常繁忙。但众所周知(你可能还记得他是一位非常特别的矮人,无法忍受阳光),Greg 只能在夜晚进行挖掘。清晨时分,他必须在第一缕阳光照射之前回到自己的地下室。因此,他想找到从挖掘点回到地下室的最短路径。Greg 还记得 Codeforces 的参赛者曾成功解决了把他的棺材运到地下室的问题。于是,Greg 以某种神奇的方式出现在你的卧室,并用非常有说服力的方式请求你的帮助。像往常一样,你也不太好意思拒绝他。 经过一番思考,你将这个问题形式化如下:由于 Neverland 山有规则的外形且顶端非常尖锐,它可以被表示为一个底面半径为 $r$、高为 $h$ 的圆锥体。Greg 正在挖掘的墓地以及他的地下室都可以用圆锥表面上的两个点来表示。你要做的就是找到这两个点沿圆锥表面的最短距离。 增加难度的是,山的底部以及山下方的区域都已被矮人们挖穿(不禁让人怀疑他们是不是也在寻找和 Greg 一样的宝贝……)。因此,在考虑最短路径时,不仅可以沿着圆锥的侧面行走,也可以走圆锥的底面(在特定情况下,两个点都可能位于底面上——参见第一个样例)。 Greg 希望你输出这两点之间的最短路径长度——剩下的路他自己认得。他给了你两个小时来解决这个问题,倒计时已经开始!

输入格式

第一行包含两个用空格分隔的整数 $r$ 和 $h$($1 \leq r, h \leq 1000$)——分别表示圆锥的底面半径和高度。 接下来的第二、三行分别包含两个点在圆锥表面上的坐标,每行为三个空格分隔的实数。坐标系的原点位于圆锥底面的中心,旋转轴与 $OZ$ 轴重合。在该坐标系下,圆锥顶点为 $(0, 0, h)$,底面中心为 $(0, 0, 0)$,底面是 $XOY$ 平面上的一个圆,圆心位于 $(0, 0, 0)$,圆锥表面上所有点的 $z$ 坐标均为非负数。保证输入点到圆锥表面的距离不超过 $10^{-12}$。所有实数保留不超过 16 位小数。

输出格式

输出所给两点之间的最短路径长度,绝对或相对误差不超过 $10^{-6}$。

说明/提示

由 ChatGPT 5 翻译