#P100172. 破解谜题

    ID: 222 传统题 文件IO:puzzle 1000ms 512MiB 尝试: 1 已通过: 1 难度: 10 上传者: 标签>搜索搜索与剪枝记忆化搜索广搜深搜推理计数

破解谜题

题目背景

结束了一早上的摸鱼 IT 史学习,CodingCow 想吃点东西。于是 CodingCow 点了一份外卖,外卖员很懒,把外卖扔在了 1 楼,然后给 CodingCow 打了一个电话,溜了……

无奈的 CodingCow 只好下楼,CodingCow 走到电梯间,等了很久……很久……

于是他开始玩一个游戏,或许你见过类似的:

没错,CodingCow 玩的游戏和你小时候玩过的弹弹珠机有些类似。在一块板上,杵着若干跟柱子,这块板立着放置,每次玩家从某一列的最上面一行抛下一颗弹珠,弹珠会这样运动:

  • 如果下一个格子是空格,那么向下运动一格。
  • 如果下一个格子是柱子或者已经到了底部,则停止滚动并停在原处。
  • 如果下一个格子是一颗停止的弹珠,则如果在左侧和左下方为空格时首选滚动到左侧的那一行,否则如果右侧和右下方为空格,则滚动到右侧的那一行。如果两侧都不为空,则弹珠静止不再移动。

题目描述

CodingCow 就这样站在电梯间……造板子……

可是,CodingCow 突然发现自己身上并没有带弹珠,于是他先写出了一些数字,对于数字 xx 表示从第 xx 下落。CodingCow 希望模拟出下落后板子的状态,可是 CodingCow 的脑子太菜了,请你帮帮他!

输入格式

输入第一行三个整数 nnmmkk,表示有一个 n×mn \times m 的板子,kk 次投弹珠。

随后是一个 n×mn \times m 的矩阵,描述板子,其中:. 表示平板、X 表示柱子、O 表示弹珠(保证初始时没有弹珠)。

此后一行 kk 个整数,描述了 CodingCow 放弹珠的顺序。一颗弹珠只有当上一颗完全走完,CodingCow 才会放下一颗。设这个整数为 xx,它的意思是从第 xx 列放入。

输出格式

输出一个 n×mn \times m 的矩阵,表示放完弹珠的样子。

样例

5 4 4
....
....
X...
....
....
1 1 1 1
....
O...
X...
....
OOO.
7 6 6
......
......
...XX.
......
......
.XX...
......
1 4 4 6 4 4
......
...O..
...XX.
......
.OO...
.XX...
O..O.O
见 "sample_problem3.zip/sample/2.in"
见 "sample_problem3.zip/sample/2.ans"

提示

本题输入量巨大,请务必使用较快的读写方式。

寄语

“给我瞧好了,这是斩灭海山的力量,化作焦炭吧。”

附件

sample_problem3.zip

数据范围

对于 60%60\,\% 的数据 1n1001\leq n \leq 100

对于 100%100\,\% 的数据 1n8×1041 \leq n \leq 8 \times 10 ^41m1001 \leq m \leq 1001k5×1051 \leq k \leq 5 \times 10^5,保证放置弹珠的时候指定的列还有空间。