切換
舊版
前往
大廳
主題

ZeroJudge - e799: p6. 資工系的浪漫 解題心得

Not In My Back Yard | 2020-05-28 00:20:43 | 巴幣 0 | 人氣 228

題目連結:


題目大意:
給定兩正整數 N 、 M (2 ≦ N 、 M ≦ 62),代表有一個 N 列 M 行的圖形被編碼成 N 個數字,每個數字有 M 個位元。接著一列給定一個字元 C ,代表該圖形只由「.」以及該字元組成。而編碼方式正是將該圖形為「.」的地方視為 0 ,另一個視為 1 。

因此,接著有 N 列輸入,每列給定一非負整數 S (0 ≦ S ≦ 2 ^ M - 1)。代表編碼後的內容。

請將編碼解碼,還原出圖形原本的樣子。



範例輸入:
範例輸入一:
9 7
@
0
127
127
28
28
28
127
127
0

範例輸入二:
8 8
#
0
102
255
255
126
60
24
0

範例輸入三:
6 7
6
99
99
99
99
119
62


範例輸出:
範例輸出一:
. . . . . . .
@ @ @ @ @ @ @
@ @ @ @ @ @ @
. . @ @ @ . .
. . @ @ @ . .
. . @ @ @ . .
@ @ @ @ @ @ @
@ @ @ @ @ @ @
. . . . . . .

範例輸出二:
. . . . . . . .
. # # . . # # .
# # # # # # # #
# # # # # # # #
. # # # # # # .
. . # # # # . .
. . . # # . . .
. . . . . . . .

範例輸出三:
6 6 . . . 6 6
6 6 . . . 6 6
6 6 . . . 6 6
6 6 . . . 6 6
6 6 6 . 6 6 6
. 6 6 6 6 6 .


解題思維:
就是單純的位元運算。對於一個編碼後的數字 S ,用一個變數 i = 2 ^ (M - 1),每次更新便將 i 右移一個位元(等同於 ÷ 2)。然後對於每個 i (某個 2 冪次 p),去跟 S 作 AND 運算。如果運算結果不為 0 ,代表該位元(此時為第 p 位元,因為 i = 2 ^ p)被編碼為 1 ,也就代表該位置為字元 C ;反之,該位置為「.」。

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

創作回應

相關創作

更多創作