猜拳 (APCS 2020-01 初級)

1.0s 256M

幼稚園的絲絲很喜歡跟哥哥玩猜拳,因為這是他少數有機會贏哥哥的遊戲。每天只要一回家,絲絲就要哥哥陪他猜拳。為了戰勝哥哥,絲絲每天在幼稚園時都會花好多時間研究出拳的策略,並將預計要出的拳寫在紙上。但是哥哥上了國中以後功課越來越多,沒有空先思考要出什麼拳,於是哥哥決定根據絲絲出的拳來決定該如何出拳。

每天哥哥只要決定第一輪要出的拳 \(F\),接下來他的猜拳策略如下:

  • 如果絲絲連續兩輪出了一樣的拳,下一輪他就會出打敗絲絲前兩輪的拳
  • 否則,他下一輪會出跟絲絲前一輪一樣的拳

出拳以 \(0\)、\(2\)、\(5\) 表示,分別代表石頭、剪刀、布。勝負規則為:石頭(\(0\))贏剪刀(\(2\))、剪刀(\(2\))贏布(\(5\))、布(\(5\))贏石頭(\(0\));兩人出一樣的拳則為平手。

請你寫一個程式模擬兩人的遊戲過程與結果。

輸入格式

第一行輸入哥哥第一輪要出的拳 \(F\)。

第二行輸入妹妹準備的數量 \(N\)。

第三行依序輸入妹妹準備出的拳 \(y_1, y_2, \ldots, y_N\),以空格隔開。

限制

  • 所有的出拳皆為 \(0\)、\(2\)、\(5\)(\(0\) 為石頭、\(2\) 為剪刀、\(5\) 為布)
  • \(1 \le N \le 10\)

輸出格式

輸出一行,依序輸出哥哥每一回合所猜的拳,以空格隔開,接著在冒號後輸出在第幾回合分出勝負:

  • 若在第 \(k\) 輪時哥哥贏了,輸出 : Won at round k
  • 若在第 \(k\) 輪時哥哥輸了,輸出 : Lost at round k
  • 若比完 \(N\) 輪仍然平手,輸出 : Drew at round N

評分說明

每一筆測試資料的執行時間限制均為 \(1\) 秒,依正確通過的測試資料筆數給分。其中:

  • 第 1 子題組(\(20\) 分):\(N = 1\)。
  • 第 2 子題組(\(20\) 分):\(N = 2\),且 \(y_1 \ne y_2\)。
  • 第 3 子題組(\(60\) 分):無額外限制。

範例輸入 1

0
4
2 5 0 2

範例輸出 1

0 : Won at round 1

範例輸入 2

2
2
2 0

範例輸出 2

2 2 : Lost at round 2

範例輸入 3

5
4
5 5 0 0

範例輸出 3

5 5 2 : Lost at round 3

範例輸入 4

5
6
5 5 2 2 0 0

範例輸出 4

5 5 2 2 0 0 : Drew at round 6

題目來源

APCS 2020 年 1 月實作題第 1 題。

題目頁說明

快速鍵

主要功能

  • 範例測試 — 執行題目附帶的範例測資並自動比對預期輸出。
  • 自訂測試 — 自己貼 stdin 執行程式。可勾選「與預期輸出比對 (diff)」做行對行比對。
  • 模板 — 貼上你在個人資料設定的預設程式碼模板。
  • 協作 — 與其他同學共筆編輯這題的程式碼。
  • 自動草稿 — 編輯器內容每 1.5 秒自動存到瀏覽器(per 帳號 / 題目 / 語言)。
  • 提交 — 把程式碼交給 judge 評測,回傳 AC / WA / TLE 等結果。

限制

  • 程式碼最多 65,536 字元
  • 自訂測試 stdin 與預期輸出各最多 1 MB (約 100 萬字元)
  • 自訂測試與範例測試共用一個沙箱,每人約 3 秒 1 次 (範例測試 1 秒 1 次)
  • 自訂測試與範例測試都有 15 秒 牆鐘上限(正式評測仍依題目原本時限)
  • 互動題不提供自訂測試(無法模擬與 judge 互動)。
  • 提交評測本身沒有 rate limit,但同題短時間內多次提交會被視為刷分。