延慶b2c網(wǎng)站制作價(jià)格百度推廣售后
題目描述
Berland的總統(tǒng)辦公室內(nèi)設(shè)有多個(gè)辦公桌,其中總統(tǒng)和其屬下各自擁有獨(dú)特顏色的辦公桌??偨y(tǒng)希望統(tǒng)計(jì)哪些屬下的辦公桌緊鄰他的辦公桌,但不記得確切的數(shù)量。
輸入描述:
- 第一行包含三個(gè)值
n, m, c
,分別是辦公室的長(zhǎng)度、寬度以及總統(tǒng)辦公桌的顏色。 - 接下來(lái)的
n
行每行包含一個(gè)長(zhǎng)度為m
的字符串,描述辦公室平面圖:- 用大寫(xiě)拉丁字母表示桌子的顏色。
- 用字符
.
表示空地。
輸出描述:
輸出一個(gè)整數(shù),表示緊鄰總統(tǒng)辦公桌的屬下人數(shù)(即不同顏色的辦公桌數(shù)量)。
示例:
輸入:
3 4 R
G.B.
.RR.
TTT.
輸出:
2
輸入:
3 3 Z
.H.
..Z
輸出:
0
解題思路
- 讀取輸入數(shù)據(jù): 首先讀取辦公室的平面圖和總統(tǒng)辦公桌的顏色。
- 記錄總統(tǒng)辦公桌位置: 遍歷整個(gè)平面圖,將所有總統(tǒng)辦公桌的位置存儲(chǔ)在集合中。
- 查找鄰居桌子: 遍歷每個(gè)總統(tǒng)桌子的位置,檢查上下左右是否存在其他顏色的桌子,并記錄這些顏色。
- 計(jì)算結(jié)果: 輸出記錄的鄰居顏色集合的大小,即為緊鄰總統(tǒng)桌子的屬下數(shù)量。
Python代碼實(shí)現(xiàn)
以下是完整的Python實(shí)現(xiàn)代碼:
def main():# 讀取輸入n, m, c = input().split()n, m = int(n), int(m)c = c.strip()plan = []president = set()# 輸入平面圖并記錄總統(tǒng)桌子的位置for row in range(n):line = input().strip()plan.append(list(line))for col in range(m):if plan[row][col] == c:president.add((row, col))neighbors = set()# 遍歷總統(tǒng)桌子的位置,查找鄰居for currentRow, currentCol in president:if currentRow > 0: # 上方temp = plan[currentRow - 1][currentCol]if temp != '.' and temp != c:neighbors.add(temp)if currentRow < n - 1: # 下方temp = plan[currentRow + 1][currentCol]if temp != '.' and temp != c:neighbors.add(temp)if currentCol > 0: # 左側(cè)temp = plan[currentRow][currentCol - 1]if temp != '.' and temp != c:neighbors.add(temp)if currentCol < m - 1: # 右側(cè)temp = plan[currentRow][currentCol + 1]if temp != '.' and temp != c:neighbors.add(temp)# 輸出鄰居的數(shù)量print(len(neighbors))if __name__ == "__main__":main()
示例運(yùn)行
示例1:
輸入:
3 4 R
G.B.
.RR.
TTT.
運(yùn)行結(jié)果:
2
示例2:
輸入:
3 3 Z
.H.
..Z
運(yùn)行結(jié)果:
0
代碼解析
- 輸入處理:
input().split()
將n, m, c
解析為整數(shù)和字符,strip()
去除多余空格。 - 記錄位置: 利用
set
數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)總統(tǒng)辦公桌的位置,避免重復(fù)。 - 鄰居查找: 遍歷總統(tǒng)桌子的位置,檢查上下左右鄰居是否為其他顏色。
- 結(jié)果輸出: 使用
len()
輸出鄰居顏色集合的大小。
總結(jié)
本題主要考察二維數(shù)組的遍歷和集合的使用。通過(guò)合理的數(shù)據(jù)結(jié)構(gòu)(如 set
),我們可以高效地完成鄰居顏色的統(tǒng)計(jì)。
歡迎大家留言討論!😊