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

欢迎大家留言讨论!😊


相关推荐
学习的学习者22 分钟前
CS课程项目设计19:基于DeepFace人脸识别库的课堂签到系统
人工智能·python·深度学习·人脸识别算法
搂鱼11451426 分钟前
(二分、思维)洛谷 P4090 USACO17DEC Greedy Gift Takers P 题解
算法
YSRM36 分钟前
Leetcode+Java+图论+岛屿问题
java·算法·leetcode·图论
悠哉悠哉愿意1 小时前
【数据结构与算法学习笔记】双指针
数据结构·笔记·python·学习·算法
MoRanzhi12031 小时前
5. Pandas 缺失值与异常值处理
数据结构·python·数据挖掘·数据分析·pandas·缺失值处理·异常值处理
C_lea2 小时前
链表转置算法
算法·链表
未知陨落2 小时前
LeetCode:89.分割等和子集
算法·leetcode
程序员的奶茶馆2 小时前
Python 字典速查:键值对操作与高频函数
python·面试
tryCbest2 小时前
Python 使用 Redis 详细教程
redis·python·bootstrap
Cx330❀2 小时前
《C++ STL:vector类(下)》:攻克 C++ Vector 的迭代器失效陷阱:从源码层面详解原理与解决方案
开发语言·数据结构·c++·经验分享·算法