PTA-感染人数

设某住宿区域是一个n×n的方阵,方阵中的每个小方格为一个房间,房间里可能住一个人,也可能空着。第一天,某些房间中住着的人得了一种高传染性的流感,以后每一天,得流感的人会使其邻居(住在其上、下、左、右方向存在的房间里面的人)传染上流感,请问:第m天总共有多少人得流感?

输入格式:

第一行输入两个整数n,m(1@表示当天该房间住着得流感的人,.表示该房间住着健康的人,#表示该房间是空的。

输出格式:

输出一个整数,表示第m天得了流感的人数。

输入样例1:

5 3
#....
.....
...##
.#.@.
@.#..

输出样例1:

10

输入样例2:

5 4
....#
.#.@.
.#@..
#....
.....

输出样例2:

16

Python:

def count_infected_people(n, m, room_layout):
    def get_neighbors(i, j):
        neighbors = [(i-1, j), (i+1, j), (i, j-1), (i, j+1)]
        valid_neighbors = [(x, y) for x, y in neighbors if 0 <= x < n and 0 <= y < n]
        return valid_neighbors

    def update_layout(layout):
        new_layout = [row[:] for row in layout]
        for i in range(n):
            for j in range(n):
                if layout[i][j] == '@':
                    neighbors = get_neighbors(i, j)
                    for x, y in neighbors:
                        if layout[x][y] == '.':
                            new_layout[x][y] = '@'
        return new_layout

    for _ in range(m-1):
        room_layout = update_layout(room_layout)

    return sum(row.count('@') for row in room_layout)

# 读取输入
n, m = map(int, input().split())
room_layout = [list(input().strip()) for _ in range(n)]

# 计算结果并输出
result = count_infected_people(n, m, room_layout)
print(result)

 

结果截图:

PTA-感染人数_第1张图片 

你可能感兴趣的:(共识算法,边缘计算)