问题 C: 小新的靶场射击

问题 C: 小新的靶场射击

时间限制: 1 Sec  内存限制: 128 MB
提交: 24  解决: 6
[状态] [讨论版] [提交] [命题人:]
题目描述
       小新同学打字太慢了,所以他决定去金山打字通练一下打字速度,以便自己在新生赛上能更快的AK。可是对着很长的文章,小新都快无聊死了。所以他决定去换另一种方式来练习打字速度。他在不知某处找到了一个叫做靶场射击的小游戏。
       游戏规则是这样的:系统会随机在某一时刻,刷新出若干个靶子,每个靶子的中心都有一个大写字母,同时每个靶子是会移动的,每个靶子都有自己的运动轨迹,除非靶子完全移动出屏幕,否则就可以被击毁。游戏中可以随时敲击键盘,如果敲击的字母和靶子所代表的的字母一样,则靶子就被击毁,如果没有靶子和敲击的字母一致,则忽略。
       游戏的屏幕外围被方框包围,内部可以看做n行m列的像素,每个像素可以显示靶子对应位置的图案,也可以显示空地,空地表示为‘ ’。为了方便描述,设定左上角的坐标为(1,1),右下角的坐标为(n,m)。
       靶子的图案基本都是一样的,除了中心的字母不同,下面给出了中心字母为'A'和'C'的靶子样例。
       
       因为靶子的形状较为复杂,所以以下的坐标特指中心字母所在的位置。每个靶子会在ti时刻出现在(xi,yi)的位置,同时会有一个运动方向(dxi,dyi)。假设靶子当前位置为(xi,yi),靶子下一秒将运动至(xi+dxi,yi+dyi)的位置。
       如果靶子被击中,靶子会变成被击毁的图案,如下所示。
       
       其中'@'字符对应原本的中心字母的位置。靶子被击中后,会停止移动,并在延时1秒后消失。换句话说,假设靶子在s秒被击中,那么第s秒、第s+1秒靶子将显示被击毁的图案,之后将消失。
       聪明的小新早就知道了每个靶子出现的时间、位置和运动方向。小新在每一秒都会在靶子都刷新完成后(包括靶子的出现、移动、消失)敲击几个按键。你能知道最后屏幕上显示的图案吗?题目保证最后时刻没有图案重叠。

输入
     输入第一行包含四个整数n,m,q,T(10<=n,m<=500, 0<=q<=100,1<=T<=20),n,m表示屏幕大小,q表示靶子的数量,T代表求第T秒的屏幕状态。
     接下来q行,每行一个大写字母ch和五个整数ti,xi,yi,dxi,dyi,(1<=ti<=T, 1<=xi<=n, 1<=yi<=m, -n<=dxi<=n,-m<=dyi<=m)。ch代表靶子中心字母的位置,其余数字含义如上所述。
     接下来T行,每行有一串只包含大写字母的字符串S(1<=S的长度<=30),代表每一秒靶子都出现后,小新的敲击的键盘字母。每一行后可能有多余的空白字符。

输出
     输出T秒时,屏幕的状态。屏幕最外层有边框,具体样式参照样例。
样例输入 Copy
12 10 2 2
A 1 4 4 2 2
K 2 8 7 -3 -2
ICANAK
ICANAC
样例输出 Copy
------------
|          |
|          |
| *****    |
| **@**    |
|  | |     |
||-----|   |
|    _____ |
|    |_K_| |
|     | |  |
|   |-----||
|          |
|          |
------------
提示