2020年8月TOI新手同好會 (原題連結)
4-俄羅斯方塊 (Tetris)
問題敘述
小閔是個厲害的程式高手,在閒暇之餘他最喜歡做的事便是玩俄羅斯方塊。為求精進,他會將每局的操作側錄下來觀察自己的技巧有沒有進步。遊戲中有五種指令,代號為 0 到 4,以 T 字型方塊為例,指令效果如下表所示。
指令代號 |
指令前 |
指令後 |
0 (無指令) |
⬜⬛❎⬛⬜⬜ ⬜⬜⬛⬜⬜⬜ ⬜⬜⬜⬜⬜⬜ ⬜⬜⬜⬜⬜⬜ ⬜⬜⬜⬜⬜⬜ ⬜⬜⬜⬜⬜⬜ |
⬜⬜⬜⬜⬜⬜ ⬜⬛❎⬛⬜⬜ ⬜⬜⬛⬜⬜⬜ ⬜⬜⬜⬜⬜⬜ ⬜⬜⬜⬜⬜⬜ ⬜⬜⬜⬜⬜⬜ |
1 (右移) |
⬜⬛❎⬛⬜⬜ ⬜⬜⬛⬜⬜⬜ ⬜⬜⬜⬜⬜⬜ ⬜⬜⬜⬜⬜⬜ ⬜⬜⬜⬜⬜⬜ ⬜⬜⬜⬜⬜⬜ |
⬜⬜⬜⬜⬜⬜ ⬜⬜⬛❎⬛⬜ ⬜⬜⬜⬛⬜⬜ ⬜⬜⬜⬜⬜⬜ ⬜⬜⬜⬜⬜⬜ ⬜⬜⬜⬜⬜⬜ |
2 (左移) |
⬜⬛❎⬛⬜⬜ ⬜⬜⬛⬜⬜⬜ ⬜⬜⬜⬜⬜⬜ ⬜⬜⬜⬜⬜⬜ ⬜⬜⬜⬜⬜⬜ ⬜⬜⬜⬜⬜⬜ |
⬜⬜⬜⬜⬜⬜ ⬛❎⬛⬜⬜⬜ ⬜⬛⬜⬜⬜⬜ ⬜⬜⬜⬜⬜⬜ ⬜⬜⬜⬜⬜⬜ ⬜⬜⬜⬜⬜⬜ |
3 (置底) |
⬜⬛❎⬛⬜⬜ ⬜⬜⬛⬜⬜⬜ ⬜⬜⬜⬜⬜⬜ ⬜⬜⬜⬜⬜⬜ ⬜⬜⬜⬜⬜⬜ ⬜⬜⬜⬜⬜⬜ |
⬜⬜⬜⬜⬜⬜ ⬜⬜⬜⬜⬜⬜ ⬜⬜⬜⬜⬜⬜ ⬜⬜⬜⬜⬜⬜ ⬜⬛❎⬛⬜⬜ ⬜⬜⬛⬜⬜⬜ |
4 (右旋) |
⬜⬛❎⬛⬜⬜ ⬜⬜⬛⬜⬜⬜ ⬜⬜⬜⬜⬜⬜ ⬜⬜⬜⬜⬜⬜ ⬜⬜⬜⬜⬜⬜ ⬜⬜⬜⬜⬜⬜ |
⬜⬜⬛⬜⬜⬜ ⬜⬛❎⬜⬜⬜ ⬜⬜⬛⬜⬜⬜ ⬜⬜⬜⬜⬜⬜ ⬜⬜⬜⬜⬜⬜ ⬜⬜⬜⬜⬜⬜ |
每送出一個指令,方塊都會先往下移一格,再執行該指令之效果。指令執行方式為以中心點先移動再進行其餘方塊位置計算。若途中遇到不合法的指令操作使得方塊超出邊界,必須將該指令視為0號指令(請見範例2)。
請撰寫一個程式模擬操作結果之畫面。
評分說明
第一組(30分):測資只包含0~3號指令,並保證沒有不合法指令產生。
第二組(30分):測資包含所有指令,並保證沒有不合法指令產生。
第三組(40分):無特殊限制。
第一行為兩個整數,代表畫面大小為 x×y (x為橫軸大小,y為縱軸大小,3 ≤ x, y ≤ 100)。畫面最左下角座標為 (1, 1)。第二行由一個整數n構成 (1 ≤ n < y),代表遊戲內會出現的所有操作數目。第三行由n個整數構成,代表對方塊所下達之指令。
⬛❎⬛
⬜⬛⬜
錨點為旋轉時的參考點(上圖標記叉號所在位置),當該方塊旋轉時,以錨點作為基準點。除此之外,錨點亦為初始生成位置之參考點,初始方塊出現錨點座標為 (⌈x/2⌉ , y),且面對方向如上圖所示。(⌈x⌉ 代表為對x向上取整數值。)
輸出遊戲執行完所有指令後的畫面。以1代表有方塊之空間,0代表無方塊之空間。
範例3說明:已經置底後的指令皆為無效指令,不執行。
6 6 3 0 1 3
000000 000000 000000 000000 001110 000100
6 6 4 1 1 1 1
000000 000000 000000 000000 000111 000010
5 5 5 1 4 3 1 1
00000 00000 00010 00110 00010
3 6 4 4 4 0 4
000 000 000 010 011 010
編號 | 身分 | 題目 | 主題 | 人氣 | 發表日期 |
23146 | yes51851823@ ... (wseds) | f340 | 982 | 2020-10-25 21:12 |