154. 24年9月-华为国内-2.病毒的传播

难度 9
  • 标签:
  • 大厂笔试真题华为
题目描述
题解
题库

24年9月-华为国内-2.病毒的传播

题目内容

最近病毒肆虐,科学家为了研究病毒的传播轨迹,需要设计一套简易的传播模型。
在一张 M×N 地图中,包含墙体、空地、已感染的人(不戴口罩)、已感染的人(戴口罩)、未感染的人(不戴口罩)、未感染的人(戴口罩)。科学家会设置一些危险系数以及感染阈值,然后观察未感染人群大概多少天以后会被感染。

位置含义的编码如下:

数值 含义
0 空地
1 墙壁
2 已感染的人(不戴口罩)
3 已感染的人(戴口罩)
4 未感染的人(不戴口罩)
5 未感染的人(戴口罩)
  • 危险系数:为感染的人对周围的位置造成的风险(戴口罩和不戴口罩数值不同),每过一格危险系数减1,遇到墙体则不再传播。
    一个位置上若出现多个传染源传播的危险系数,取最大值。

  • 感染阈值:该位置的人被感染的门槛(戴口罩和不戴口罩数值不同),当危险系数 ≥ 感染阈值,该位置的人就会被传染。

注意事项:

  1. 判断当前位置是否感染只需判断当前危险系数是否 ≥ 当前人的感染阈值。是否戴口罩会影响危险系数和感染值的大小。
  2. 未感染的人感染后第二天变成已感染的人,并刷新周围危险系数,可能继续感染其他人。

输入描述

第一行:M N a1 a2 b1 b2,用空格隔开
含义如下:

参数 含义 取值范围
M 地图行数 1 ≤ M ≤ 100
N 地图列数 1 ≤ N ≤ 100
a1 危险系数(戴口罩) 1 ≤ a1 < a2 ≤ 1000
a2 危险系数(不戴口罩)
b1 感染阈值(不戴口罩) 1 < b2 < b1 ≤ 1000
b2 感染阈值(戴口罩)

第二行到第 M+2 行:M 行 N 列地图数据信息

输出描述

输出 M 行 N 列数据信息,每个位置输出如下:

  • 该位置没有人(空地或墙壁):输出 -1
  • 该位置的人初始就被感染:输出 0
  • 该位置的人初始未被感染,但最终被感染:输出被感染的天数
  • 该位置的人未被感染:输出 -1

样例1

输入

3 4 7 10 6 2
0 0 0 0
2 0 1 5
0 0 0 0

输出

-1 -1 -1 -1
0 -1 -1 -1
-1 -1 -1 -1

说明
该用例中,初始地图中,第2行第1列处存在一个已感染并且不戴口罩的人,根据危险系数的配置信息,危险系数(不戴口罩)为10,所以该位置的危险系数为10,计算所有位置的危险系数如下:

image-20250805110432037

可以看到因为墙的原因,第2行第4列位置上的危险系数为5,该位置上的人戴了口罩,该位置上的人感染阈值为6,则该人不会被感染。

样例2

输入

3 4 7 10 6 2
0 0 0 0
2 0 1 5
0 0 0 5

输出

-1 -1 -1 -1
0 -1 -1 2
-1 -1 -1 1

说明

该样例中,初始地图中,第2行第1列处存在一个已感染并且不戴口罩的人,根据危险系数的配置信息,危险系数(不戴口罩)为10,所以该位置的危险系数为10,计算所有位置的危险系数如下:

image-20250805110815400

  • 第2行第4列位置危险系数为5,该位置的人戴口罩(值为5),感染阈值为6,因此第一天不会被感染。
  • 第3行第4列位置危险系数为6,该位置的人戴口罩(值为5),感染阈值为6,因此第一天会被感染,并在第二天变为已感染的人(戴口罩,值为3)。

第一天以后地图更新如下:0 0 0 0 2 0 1 5 0 0 0 3这时再计算第二天的危险系数,根据危险系数的配置信息,危险系数(戴口罩)为7,所以第3行第4列位置的危险系数为7所有位置需要计算危险系数的最大值,如下图:

image-20250805111024653

第二天,第2行第4列位置上的危险系数从5提升到了6,而该位置上的人感染阈值为6,则该位置的人会在第二天被感 染。 最终结果如下:

-1 -1 -1 -1
0 -1 -1 2
-1 -1 -1 1