luogu#P6370. [COCI2006-2007#6] KAMEN

[COCI2006-2007#6] KAMEN

题目描述

在一个 r×cr\times c 的方阵里,有些点是 .,表示为空;有些点是 X,表示这里是一堵墙。

我们可以认为这个方阵在竖直方向放置。

有一个人在这 cc 列的第一行会抛下 nn 块石头,用 O 来表示。如果这一个石头由于重力作用会向下滚动。具体来说,就是会从第一行向最后一行滚动,规则如下:

  • 如果下一个格子是空格,那么向下运动一格。
  • 如果下一个格子是墙或者已经到了第 rr 行,则停止滚动并停在原处。
  • 如果下一个格子是一块停止的石头,则如果在左侧和左下方为空格时首选滚动到左侧的那一行,否则如果右侧和右下方为空格,则滚动到右侧的那一行。如果两侧都不为空,则石头静止不在移动。

只有前一块石头永久静止后,下一块石头才会被抛下。

请你输出最终方阵的状态。

输入格式

输入第一行为两个整数 r,cr,c

接下来的 rr 行,每行 cc 个字符,每个字符可能为 .X

下一行为一个整数 nn,表示石头的数量。

接下来的 nn 行,每行一个整数 1xc1\le x\le c,表示这个石头位于第 xx 列被抛下,按照输入顺序依次抛下。

输出格式

输出一个 r×cr\times c 的方阵,包含 . X O,为最终石头都抛完后的状态。

5 4
....
....
X...
....
....
4
1
1
1
1
....
O...
X...
....
OOO.
7 6
......
......
...XX.
......
......
.XX...
......
6
1
4
4
6
4
4
......
...O..
...XX.
......
.OO...
.XX...
O..O.O

提示

样例 1 解释

44 块石头依次在第一列被抛下。第一块石头被唯一一堵墙堵住。这样剩下的石头都可以向右滚动一列。第二块石头毫无障碍地下落,第三四块分别落在了它的左边和右边。

数据规模与约定

  • 对于 60%60\% 的数据,保证 r30r\le 30
  • 对于 100%100\% 的数据,保证 1r3×1041\le r\le 3\times 10^41c301\le c\le 301n1051\le n\le 10^5

说明

题目译自 COCI2006-2007 CONTEST #6 T4 KAMEN