154. 24年9月-华为国内-2.病毒的传播
难度 9- 标签:
24年9月-华为国内-2.病毒的传播
题目内容
最近病毒肆虐,科学家为了研究病毒的传播轨迹,需要设计一套简易的传播模型。
在一张 M×N 地图中,包含墙体、空地、已感染的人(不戴口罩)、已感染的人(戴口罩)、未感染的人(不戴口罩)、未感染的人(戴口罩)。科学家会设置一些危险系数以及感染阈值,然后观察未感染人群大概多少天以后会被感染。
位置含义的编码如下:
数值 | 含义 |
---|---|
0 | 空地 |
1 | 墙壁 |
2 | 已感染的人(不戴口罩) |
3 | 已感染的人(戴口罩) |
4 | 未感染的人(不戴口罩) |
5 | 未感染的人(戴口罩) |
-
危险系数:为感染的人对周围的位置造成的风险(戴口罩和不戴口罩数值不同),每过一格危险系数减1,遇到墙体则不再传播。
一个位置上若出现多个传染源传播的危险系数,取最大值。 -
感染阈值:该位置的人被感染的门槛(戴口罩和不戴口罩数值不同),当危险系数 ≥ 感染阈值,该位置的人就会被传染。
注意事项:
- 判断当前位置是否感染只需判断当前危险系数是否 ≥ 当前人的感染阈值。是否戴口罩会影响危险系数和感染值的大小。
- 未感染的人感染后第二天变成已感染的人,并刷新周围危险系数,可能继续感染其他人。
输入描述
第一行: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,计算所有位置的危险系数如下:
可以看到因为墙的原因,第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,计算所有位置的危险系数如下:
- 第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所有位置需要计算危险系数的最大值,如下图:
第二天,第2行第4列位置上的危险系数从5提升到了6,而该位置上的人感染阈值为6,则该位置的人会在第二天被感 染。 最终结果如下:
-1 -1 -1 -1
0 -1 -1 2
-1 -1 -1 1