题目描述
Berland的总统办公室内设有多个办公桌,其中总统和其属下各自拥有独特颜色的办公桌。总统希望统计哪些属下的办公桌紧邻他的办公桌,但不记得确切的数量。
输入描述:
- 第一行包含三个值
n, m, c
,分别是办公室的长度、宽度以及总统办公桌的颜色。 - 接下来的
n
行每行包含一个长度为m
的字符串,描述办公室平面图:- 用大写拉丁字母表示桌子的颜色。
- 用字符
.
表示空地。
输出描述:
输出一个整数,表示紧邻总统办公桌的属下人数(即不同颜色的办公桌数量)。
示例:
输入:
3 4 R
G.B.
.RR.
TTT.
输出:
2
输入:
3 3 Z
.H.
..Z
输出:
0
解题思路
- 读取输入数据: 首先读取办公室的平面图和总统办公桌的颜色。
- 记录总统办公桌位置: 遍历整个平面图,将所有总统办公桌的位置存储在集合中。
- 查找邻居桌子: 遍历每个总统桌子的位置,检查上下左右是否存在其他颜色的桌子,并记录这些颜色。
- 计算结果: 输出记录的邻居颜色集合的大小,即为紧邻总统桌子的属下数量。
Python代码实现
以下是完整的Python实现代码:
def main():
# 读取输入
n, m, c = input().split()
n, m = int(n), int(m)
c = c.strip()
plan = []
president = set()
# 输入平面图并记录总统桌子的位置
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()
# 遍历总统桌子的位置,查找邻居
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: # 左侧
temp = plan[currentRow][currentCol - 1]
if temp != '.' and temp != c:
neighbors.add(temp)
if currentCol < m - 1: # 右侧
temp = plan[currentRow][currentCol + 1]
if temp != '.' and temp != c:
neighbors.add(temp)
# 输出邻居的数量
print(len(neighbors))
if __name__ == "__main__":
main()
示例运行
示例1:
输入:
3 4 R
G.B.
.RR.
TTT.
运行结果:
2
示例2:
输入:
3 3 Z
.H.
..Z
运行结果:
0
代码解析
- 输入处理:
input().split()
将n, m, c
解析为整数和字符,strip()
去除多余空格。 - 记录位置: 利用
set
数据结构存储总统办公桌的位置,避免重复。 - 邻居查找: 遍历总统桌子的位置,检查上下左右邻居是否为其他颜色。
- 结果输出: 使用
len()
输出邻居颜色集合的大小。
总结
本题主要考察二维数组的遍历和集合的使用。通过合理的数据结构(如 set
),我们可以高效地完成邻居颜色的统计。
欢迎大家留言讨论!😊