【算法题解】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),我们可以高效地完成邻居颜色的统计。

欢迎大家留言讨论!😊


相关推荐
liuluyang5303 小时前
C语言C11支持的结构体嵌套的用法
c语言·开发语言·算法·编译·c11
凌叁儿3 小时前
python保留关键字详解
开发语言·python
意.远3 小时前
PyTorch实现二维卷积与边缘检测:从原理到实战
人工智能·pytorch·python·深度学习·神经网络·计算机视觉
勤劳的进取家4 小时前
贪心算法之最小生成树问题
数据结构·python·算法·贪心算法·排序算法·动态规划
牛奶咖啡.8544 小时前
第十四届蓝桥杯大赛软件赛省赛C/C++ 大学 A 组真题
c语言·数据结构·c++·算法·蓝桥杯
兮兮能吃能睡4 小时前
Python中的eval()函数详解
开发语言·python
亓才孓4 小时前
[leetcode]stack的基本操作的回顾
算法
小美爱刷题4 小时前
力扣DAY46-50 | 热100 | 二叉树:展开为链表、pre+inorder构建、路径总和、最近公共祖先、最大路径和
算法·leetcode·链表
三道杠卷胡4 小时前
【AI News | 20250411】每日AI进展
人工智能·python·计算机视觉·语言模型·aigc
前端开发张小七4 小时前
16.Python递归详解:从原理到实战的完整指南
前端·python