【算法题解】B. President‘s Office - Python实现

题目描述

Berland的总统办公室内设有多个办公桌,其中总统和其属下各自拥有独特颜色的办公桌。总统希望统计哪些属下的办公桌紧邻他的办公桌,但不记得确切的数量。

输入描述:

  1. 第一行包含三个值 n, m, c,分别是办公室的长度、宽度以及总统办公桌的颜色。
  2. 接下来的 n 行每行包含一个长度为 m 的字符串,描述办公室平面图:
    • 用大写拉丁字母表示桌子的颜色。
    • 用字符 . 表示空地。

输出描述:

输出一个整数,表示紧邻总统办公桌的属下人数(即不同颜色的办公桌数量)。

示例:

输入:
复制代码
3 4 R
G.B.
.RR.
TTT.
输出:
复制代码
2
输入:
复制代码
3 3 Z
.H.
..Z
输出:
复制代码
0

解题思路

  1. 读取输入数据: 首先读取办公室的平面图和总统办公桌的颜色。
  2. 记录总统办公桌位置: 遍历整个平面图,将所有总统办公桌的位置存储在集合中。
  3. 查找邻居桌子: 遍历每个总统桌子的位置,检查上下左右是否存在其他颜色的桌子,并记录这些颜色。
  4. 计算结果: 输出记录的邻居颜色集合的大小,即为紧邻总统桌子的属下数量。

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

代码解析

  1. 输入处理: input().split()n, m, c 解析为整数和字符,strip() 去除多余空格。
  2. 记录位置: 利用 set 数据结构存储总统办公桌的位置,避免重复。
  3. 邻居查找: 遍历总统桌子的位置,检查上下左右邻居是否为其他颜色。
  4. 结果输出: 使用 len() 输出邻居颜色集合的大小。

总结

本题主要考察二维数组的遍历和集合的使用。通过合理的数据结构(如 set),我们可以高效地完成邻居颜色的统计。

欢迎大家留言讨论!😊


相关推荐
野犬寒鸦4 分钟前
JVM垃圾回收机制面试常问问题及详解
java·服务器·开发语言·jvm·后端·算法·面试
风酥糖10 分钟前
Godot游戏练习01-第16节-游戏中的状态机
算法·游戏·godot
budingxiaomoli13 分钟前
优选算法--优先级队列(堆)
算法
Trouvaille ~15 分钟前
【优选算法篇】哈希表——空间换时间的极致艺术
c++·算法·leetcode·青少年编程·蓝桥杯·哈希算法·散列表
bbbb36515 分钟前
算法调优的多目标优化与性能平衡模型的技术8
算法
Fcy64817 分钟前
与二叉树有关算法题
算法·深度优先
曲幽17 分钟前
FastAPI实战:WebSocket vs Socket.IO,这回真给我整明白了!
python·websocket·nginx·socket·fastapi·web·async·socketio
️是7819 分钟前
信息奥赛一本通—编程启蒙(3346:【例60.3】 找素数)
数据结构·c++·算法
captain37620 分钟前
map和set
数据结构·算法
qq_4160187223 分钟前
实时数据可视化库
开发语言·c++·算法