QOJ.ac

QOJ

时间限制: 60.0 s 内存限制: 256 MB 总分: 100

#17460. Driving an Icosahedral Rover

统计

经过数十年的徒劳努力,ITO(星际旅游组织)的探险队之一终于在距离太阳系十光年以内发现了一颗行星,这颗行星无疑将成为最吸引游客的景点之一。除了舒适的重力和温和的天气外,这颗行星最吸引人的特征是一个被称为“三角海”(Mare Triangularis)的区域。尽管名字叫海,但该区域并没有被水覆盖,而是一片巨大的平原。它的独特之处在于被分割成大小相同的等边三角形区域,称为“三角格”(trigons)。这些三角格构成了独特而令人震撼的景观,是旅游的必去之地。难怪 ITO 董事会决定在这颗行星上投入巨资。

尽管员工们被要求保密,但天体地质学会一如既往地在第一时间获取了这一信息。他们立即向银河联邦科学与教育部致信,声称在任何商业开发破坏自然之前,必须完成权威的学术考察。

幸运的是,天体地质学家并不打算对所有的三角格进行所有可能的考察;因为三角格的数量实在太多了。他们只计划对一些有代表性的三角格进行考察,并且对每个三角格只进行二十个不同科学方向之一的考察。

为了加速建设这个新的旅游胜地,ITO 的工程机械团队已经成功地将他们的全新发明投入实际使用。这是一款形状为正二十面体(由二十个等边三角形面组成的正多面体)的漫游车。该机器经过定制,使得二十个面中的每一个都与三角格完全吻合。通过控制安装在其内部的高科技陀螺马达,漫游车可以翻滚到与其底部接触的三角格相邻的三个三角格之一。

图 E.1:三角海上的漫游车

二十个面中的每一个都有其独特的功能。安装在与地面接触的底面上的设备可以应用于其所在的三角格。当然,漫游车原本是为了加速建造接待富裕星际旅行者的豪华酒店而设计的,但通过更换安装的设备,它也可以用于加速学术考察。

你是这辆漫游车的驾驶员,任务是按照科学委员会负责人的要求,以最少的步数将车辆移动到指定的三角格上。让你的任务更加困难的是,安装了相应设备组的指定面必须作为底面。漫游车的朝向并不重要。

图 E.2:坐标系

图 E.3:面编号

三角海的三角格具有如图 E.2 所示的二维坐标。与地球上使用的地图类似,$x$ 轴从西向东,$y$ 轴从南向北。请注意,所有坐标为 $(x, y)$ 的三角格都有坐标为 $(x - 1, y)$ 和 $(x + 1, y)$ 的相邻三角格。除此之外,当 $x + y$ 为偶数时,它有一个相邻格 $(x, y + 1)$;否则(即当 $x + y$ 为奇数时),它有一个相邻格 $(x, y - 1)$。

图 E.3 展示了漫游车表面的展开图。展开图的朝上面为外表面。也就是说,如果展开图上的数字实际标记在漫游车的面上,那么从外面应该可以读出这些数字。这些数字用于标识各个面。

当你启动漫游车时,它位于三角格 $(0, 0)$ 处,且面 0 与地面接触。漫游车的放置方式使得向北翻滚到三角格 $(0, 1)$ 上时,编号为 5 的面会变为底面。

作为第一步,你可以选择三个相邻三角格之一进行访问,即坐标为 $(-1, 0)$、$(1, 0)$ 和 $(0, 1)$ 的三角格。底面将分别变为编号为 4、1 和 5 的面。如果你在第一步选择前往 $(1, 0)$,则第二步可以将漫游车带到 $(0, 0)$、$(2, 0)$ 或 $(1, -1)$ 之一。对应的底面将分别为 0、6 或 2。漫游车可以多次访问任何三角格,包括起点和终点(如果适用)。

ITO 的理论设计部门表明,漫游车可以在有限的步数内,以指定的底面到达任何目标三角格。

输入格式

输入由多个数据集组成。数据集的数量不超过 50。

每个数据集在一行中包含三个整数 $x$、$y$ 和 $n$,由空格分隔。这里,$(x, y)$ 指定了你需要将漫游车移动到的三角格的坐标,$n$ 指定了应该在底部的面。

输入结束由包含三个零的一行表示。

输出格式

每个数据集的输出应为一行,包含一个整数,表示将漫游车移动到指定的三角格且指定的面接触地面所需的最小步数。输出中不应出现其他字符。

你可以假设所需的最大步数不超过 100。三角海足够宽广,在这些步数内不会到达其边界。

样例

输入样例 1

0 0 1
3 5 2
-4 1 3
13 -13 2
-32 15 9
-50 50 0
0 0 0

输出样例 1

6
10
9
30
47
100

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.