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

欢迎大家留言讨论!😊


相关推荐
Luo_LA5 分钟前
【LeetCode Hot100 多维动态规划】最小路径和、最长回文子串、最长公共子序列、编辑距离
算法·leetcode·动态规划
若兰幽竹29 分钟前
【机器学习】超参数的选择,以kNN算法为例
算法·机器学习
C7211BA34 分钟前
降维算法概述
算法·信息可视化·数据分析
max50060036 分钟前
Python 脚本实现数据可视化
开发语言·python·信息可视化
WSSWWWSSW42 分钟前
查看notebook的jupyter token
ide·python·jupyter
缘来是黎1 小时前
Python 进阶:生成器与上下文管理器
java·前端·python
程序猿零零漆1 小时前
《从入门到精通:蓝桥杯编程大赛知识点全攻略》(十一)-回文日期、移动距离、日期问题
java·算法·蓝桥杯
大雄野比1 小时前
Python 实现 macOS 系统代理的设置
python·macos·策略模式
豆豆酱2 小时前
强化学习到大模型训练理论概要(一)
人工智能·算法
山海青风2 小时前
OpenAI 实战进阶教程 - 第十二节 : 多模态任务开发(文本、图像、音频)
图像处理·人工智能·python·ai作画·音视频·语音识别