喺呢道互動題入面,你要用唔太多時間,由一個未知迷宮嘅入口行到出口。
著名戰士 Malcolm,亦即係 Arcania 嘅英雄,夜晚行過一片漆黑嘅森林。佢行咗好耐,開始覺得自己迷咗路,但突然喺路上撞見一道石牆。落葉下面露出嘅石板標記清楚顯示,佢發現咗一座矮人建造嘅迷宮。
英雄對森林同入面生長嘅樹木都知得唔多。好彩佢曾經同矮人相處過好長時間,所以而家只要睇迷宮嘅標記,就可以知道好多關於迷宮嘅資料。
呢座迷宮嘅標記組成咗「SK3」。「S」表示迷宮係正方形,即係迷宮嘅地面由 $n \times n$ 個大小為 $1 \times 1$ 米嘅正方形格組成。呢啲格周圍有一圈薄而完整嘅牆,牆上有兩個開口。第一個係英雄企緊嘅位置附近嘅入口,喺迷宮西南角嗰格嘅南面牆上。第二個係出口,喺迷宮東北角嗰格嘅北面牆上。
迷宮入面共用一條邊嘅兩格,可以由通道連接,亦可以畀一段一米長嘅薄內牆隔開。只要兩格之間冇牆,就可以由一格行去同佢共邊嘅另一格。另外,可以自由行過出口。入口只會開到英雄踏入迷宮嗰刻,之後會即刻閂埋,直到英雄安全到達出口先會再開。
「K3」會話畀有經驗嘅迷宮行者知,呢座迷宮有以下結構。首先,喺所有可能嘅薄內牆段入面(南北方向總共有 $n \times (n-1)$ 段,東西方向亦有同樣咁多),隨機揀三分之一(唔係整數就向下取整),再按一個隨機定好嘅次序逐段考慮。跟住按呢個次序將牆段放入迷宮。如果放入某段牆會令迷宮所在嘅正方形分成唔連通嘅部分,就捨棄嗰段牆,唔放入去。所以保證最後嘅迷宮係連通嘅。
Malcolm 開心起嚟:佢已經知道咁多關於迷宮嘅嘢,肯定可以去到出口。佢嘅目標係由入口旁邊嘅森林格出發,行到出口旁邊嘅森林格。另外,佢要快啲:由入口去出口去得夠快嘅人,會見到藏喺出口附近森林入面嘅寶藏。當然,前提係冇人早過佢攞到寶藏。
不過再諗清楚,仲有啲嘢要擔心。首先,Malcolm 唔知迷宮有幾大:正方形邊長 $n$ 可以係 $10$ 至 $200$ 米之間任何整數。其次,迷宮同周圍嘅森林一樣咁黑,Malcolm 幾乎要摸黑行。每一步開始時,英雄揀北、東、南、西四個主要方向其中之一,再嘗試向嗰個方向行一米。如果撞到障礙,就留喺原地;否則就行去嗰個方向相鄰嘅格。每一步所需時間同結果無關,所以重要嘅係總步數。
請幫英雄揀點樣行,令佢夠快到達目標格。如果英雄最多行 $5 \cdot n + 300$ 步,而且去到迷宮出口外面嗰格,解法就會被視為正確。
互動
喺呢題,評測程式會回應你嘅程式寫去標準輸出嘅指令。每個指令決定 Malcolm 下一步點行。每個指令獨佔一行,由一個大寫英文字母組成:「N」代表向北行,「E」代表向東行,「S」代表向南行,「W」代表向西行。
每收到一個指令,評測程式都會即刻向你嘅程式嘅標準輸入傳返一行,入面有一個小寫英文單字:「no」表示有障礙阻住通道;「ok」表示成功行咗一步,但英雄仲未到目標格;「end」表示成功行咗一步,而且英雄已經到目標格。收到「end」之後,程式必須終止,唔可以再輸出任何嘢。
為免輸出畀緩衝區留住,每次發出指令之後都要清空輸出緩衝區。例如 C 或 C++ 可以用 fflush (stdout),Java 可以用 System.out.flush (),Pascal 可以用 flush (output),Python 可以用 sys.stdout.flush ()。
每個測試入面,迷宮都係隨機生成之後預先固定嘅。
如果程式已經行咗至少 $100\,000$ 步,仲未超過時間限制,亦仲未到目標格,評測就會終止,結果係「答案錯誤」。
樣例
說明
上圖顯示第一個測試生成嘅迷宮。Malcolm 由圓圈標記嗰格出發,要去到交叉標記嗰格。例如,可以用以下指令序列行過呢座迷宮(指令下面係執行結果):
N W N E N W N E N E E E S E E N N N N N E N E S E E N ok no ok ok ok ok ok ok ok ok ok no ok ok ok ok ok ok ok ok ok ok ok no ok ok end
圖入面用粗灰線畫出咗呢個解法。