Login with GitHub. Nope?
修正 C++ 的程式碼在使用一定量動態記憶體後會產生 RF 的問題 @ 2019/12/6 4:45pm NeoHOJ 強勢復活中 (Open beta)
Submit  Ranklist

Problem : 188 - 三角旅行

Problem Statistics

Solved Member: 4  Submission: 18  User Tried: 8

Statement:

經過了三角形旅行,你成功的抵達了三角形國,在三角形國裡,你的對戰虛擬角色(デュエルアバター)是一個正二十面體。

(圖1)

三角形國就如同他的名稱一樣,是由一塊塊三角形連接所形成的平面所拼成的。如圖2,為了方便表示,我們以笛卡爾座標系來表示(x,y),橫座標為x軸,縱座標為y軸,則三角形國則成了一塊無限延伸的平面。

(圖2)


(圖3)

可以假設正二十面體的展開圖如上圖3,初到貴境,你只習得最基本的「滾來滾去 Lv.1」。在滾的過程中,每一步必須要保持 20 面中其中一個面緊貼著地板上的某塊三角形,並且以貼著地板的那面來表示你目前所在的座標。

你現在位於座標(0,0),並且第 0 面(見展開圖)貼著地板。每滾一次可以延著你目前所在座標三角形上其中一個邊往共邊的三角形方向滾去,換句話說,假設你現在在座標(x,y),你可以向(x-1,y), (x+1,y) 兩個方向,並且依據目前所在地的狀況,可以往 (x,y+1) 或 (x,y-1) 其中一個方向滾,並且朝著地板的那一面也會隨著滾動的過程,變成邊所相鄰的三角形。假設從起始狀態 (0,0) 往 (0,1) 滾動一步會使第 5 面朝下。

若第一步往 (−1, 0), (1, 0), (0, 1), 走,則朝下的面分別會是 4, 1, 5

你希望能到達某一些終點,問題是,最少需要滾幾步呢?

Input:Output:

每筆測資檔有多筆測資,請讀到EOF為止。
每一行為一筆測資,分別有 x,y,z(|x|,|y| ≤ 100, 0 ≤ z ≤ 19) 分別代表你希望終點停在 (x,y),並且第 z 面是朝下的。
對於每一筆測資,請輸出一行包含單一數字,代表最少需要滾幾步才能到達。

Sample Input:Sample Output:

0 0 1
3 5 2
-4 1 3
13 -13 2
-32 15 9
-50 50 0
6
10
9
30
47
100

HINT:

40% 測資滿足: |A|, |B| ≤ 20

Source:

ACM-ICPC 2011 Fukuoka

Problem Setter

Testdata:

TestTimeMemoryScore
04000ms65536kb
14000ms65536kb10
24000ms65536kb10
34000ms65536kb10
44000ms65536kb10
54000ms65536kb10
64000ms65536kb10
74000ms65536kb10
84000ms65536kb10
94000ms65536kb10
104000ms65536kb10