前往
大廳
主題

ZeroJudge - f435: 10267-Graphical Editor 解題心得

Not In My Back Yard | 2020-12-09 00:00:04 | 巴幣 0 | 人氣 222

題目連結:


題目大意:
輸入有多列,每列代表著一個指令。每列開頭為一個字元代表指令的種類,指令有以下:
I M N:創造 M × N (M 直行 N 橫列)的表格且每格的顏色為「O」;
C:使表格的每一格顏色都為「O」;
L X Y C:令第 X 行第 Y 列那一格之顏色為 C ;
V X Y1 Y2 C:令第 X 行從第 Y1 列到第 Y2 列的每一格顏色為 C;
H X1 X2 Y C:令第 Y 列從第 X1 行到第 X2 行的每一格顏色為 C;
K X1 Y1 X2 Y2 C:令一矩形,其第 X1 行第 Y1 列為左上角 、 第 X2 行第 Y2 列為右下角,該區域中每一格顏色為 C;
F X Y C:令第 X 行第 Y 列與它屬於同一顏色區塊(從該格一直沿著同顏色的相鄰格子擴張)的格子顏色為 C;
S Name:命名現在的表格為 Name,此時請輸出表格的名字以及目前表格每格的顏色;
X:停止操作。

請模擬以上指令。如果指令的開頭字元並非以上字元則忽略。其中 M 、 N ≦ 256 。



範例輸入:
I 5 6
L 2 3 A
S one.bmp
G 2 3 J
F 3 3 J
V 2 3 4 W
H 3 4 2 Z
S two.bmp
X


範例輸出:
one.bmp
OOOOO
OOOOO
OAOOO
OOOOO
OOOOO
OOOOO
two.bmp
JJJJJ
JJZZJ
JWJJJ
JWJJJ
JJJJJ
JJJJJ


解題思維:
指令稍多的模擬題。



相信 I 、 C 、 X 、 S 指令沒什麼問題,就是單純地創立新表格並初始化、初始化表格、停止繼續讀取指令以及輸出給定的 Name 字串以及表格。

L 、 K 指令應該也沒問題,就是直接存取表格的第 Y 列第 X 行(從第 X1 行第 Y1 列到第 X2 行第 Y2 列),然後將該格(那些格子)的顏色改存為 C 。

比較可能有問題的 H 、 V ,這兩者的 X1 、 X2 (Y1 、 Y2)沒有保證誰大誰小,所以要先判斷大小再決定迴圈的方向。

最後,比較麻煩的是指令 F 。而其可以使用廣度優先搜尋(Breadth First Search,BFS)去找到同一顏色的區域,如這題




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

相關創作

更多創作