#P1469. 2024.9.27-秋招-第3题-病毒的传播

2024.9.27-秋招-第3题-病毒的传播

题目内容

最近病毒肆虐,科学家为了研究病毒的传播轨迹,需要设计一套简易的传播模型。

在一张MNM*N地图中,包含墙体,空地,已感染的人(不戴口罩),已感染的人(戴口罩),未感染的人(不戴口罩),未感染的人(戴口罩)。科学家会设置一些危险系数,以及感染阈值。然后观察未感染人群大概多少天以后会被感染。

位置含义的编码如下:

危险系数:为感染的人对周围的位置造成的风险(戴口罩和不戴口罩数值不同),每过一格,危险系数就减11。遇到墙体则不再进行传播。一个位置上如果出现多个传染源传播的危险系数,则危险系数使用多个危险系数的最大值。

感染阈值:为该位置的人被感染的门限(戴口罩和不戴口罩数值不同),当危险系数大于等于感染阈值,则该位置的人就会被传染。 注意:

11.判断当前位置是否感染只有一个条件,就是当前位置上的危险系数是否大于等于当前位置上的人的感染阈值。是否带口罩会影响危险系数和感染阈值的大小,从而间接的影响该位置的人是否会被感染。

22.未感染的人在感染后会在第二天变成已感染的人,比如未感染的人(戴口罩) 如果在第33天发现自己的感染阈值小于危险系数(也就是会被感染),那么在第44天该位置就会变成已感染的人(戴口罩).所以在第44天以后需要将该位置以及周围的危险系数刷新,这就有可能会感染其他更多的人。

输入描述

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

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

输出描述

输出MMNN列数据信息,每个位置需要输出的内容如下:

  • 该位置没有人(空地或者墙壁)的话则返回1-1
  • 该位置的人初始态时就被感染了的话,则填00
  • 该位置的人初始没有被感染,但是最终被感染,则填被感染的天数
  • 该位置的人没有被感染,则返回1-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

说明

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

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

样例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

说明

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

22行第44列位置上的危险系数为55,该位置上的人戴了口罩,该位置上的人感染阈值为66,则该人在第一天不会被感染,

33行第44列位置上的危险系数为66,该位置上的人戴了口罩,该位置上的人感染阈值为66,则该人在第一天会被感染。感染后该人会变成已感染的人(戴口罩)

第一天以后地图更新如下: 0 0 0 00\ 0\ 0\ 0 2 0 1 52\ 0\ 1\ 5 0 0 0 30\ 0\ 0\ 3

这时再计算第二天的危险系数,根据危险系数的配置信息,危险系数(戴口罩)为77,所以第33行第44列位置的危险系数为77,所有位置需要计算危险系数的最大值,如下图:

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

1 1 1 1-1\ -1\ -1\ -1

0 1 1 20\ -1\ -1\ 2

1 1 1 1-1\ -1\ -1\ 1