Simulation Wizardry

题意翻译

# **题目描述** 仿真是计算机科学中涉及计算机发展的一个重要应用领域。提供洞察现实世界事件的模型。有很多种模拟,包括(和当然不限于)离散事件模拟和时钟驱动模拟。模拟通常涉及为了开发一种实用的方法,对观察到的行为进行近似。这个问题涉及到一个简单的弹球机的模拟。在弹球机中,一个钢球绕着一个表面滚动,撞击各种物体(保险杠)和累积点,直到球“消失”从表面。你要写一个模拟理想化弹球机的程序。这台机器有一个平板有障碍物的表面(保险杠和墙壁)。表面建模为M×N网格原点在左下角。每个保险杠占用一个网格点。网格在边缘的位置表面是墙。球在网格上一次发射(出现),一个初始位置,方向和生命。在这个模拟中,所有位置都是积分的,球的方向是:向上、向下、向左或正确的。球在网格周围弹跳,撞到保险杠(积累点)和墙壁(积累点)。不添加任何点)。通过撞击一个给定的保险杠累积的点数是在那个保险杠上。所有球的速度是每个时间步一个网格空间。一个球在在保险杠或墙网格点顶部移动的时间步。一次撞击会导致球向右(顺时针)旋转90度以“反弹”,而不在障碍物上移动。并且不改变位置(只有方向会因反弹而改变)。注意,通过这个沿着墙壁滑动的定义并不构成“撞击”墙壁。球的寿命表示球在从表面。对于球移动的每个网格步,球使用一个寿命单位。它还使用一些寿命单位对于它撞击的每个保险杠或墙。一次撞击所使用的寿命是保险杠或墙壁的成本。作为只要球碰到保险杠时有一个正的寿命,它就会得到保险杠的满分。注意,一个有生命周期的球在下一个动作中会“死亡”,因此不能获得在最后一个动作中撞到保险杠。一旦寿命为非正值(小于或等于零),球不见了,比赛继续进行下一个球。 # 输入输出格式 ## 输入格式 你的程序应该模拟一个弹球游戏。有几个输入行描述游戏。第一行给出整数m和n,用空格分隔。这描述了笛卡尔网格,其中1≤x≤m和1≤y≤n,游戏在其中“玩”2<m<51和2<n<51。下一行给出了撞墙的整数成本。下一行给出了缓冲器,整数p≥0。接下来的p行给出每个保险杠的x位置、y位置、值和成本,作为四个整数。每行以空格分隔。所有保险杠的X和Y位置将在网格范围内。价值和成本可以是任何整数(也就是说,它们可能是负数;负成本会给撞到保险杠的球)。文件的其余行代表球。每行代表一个球,包含四个用空格分隔的整数:球的初始X和Y位置、运动方向和它的寿命。位置将在范围内(而不是在任何保险杠或墙的顶部)。方向会四个值中的一个:0表示x(右),1表示y(上),2表示x(左),3减少Y(向下)。生存期将是一个正整数。 ## 输出格式 每个球应该有一行输出,给出一个整数点该球与球在输入中出现的顺序相同。在所有这些行之后,所有的球都应该被输出出来。 ###### (样例输入输出请见题干)

题目描述

[problemUrl]: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=3&page=show_problem&problem=50 [PDF](https://uva.onlinejudge.org/external/1/p114.pdf) ![](https://cdn.luogu.com.cn/upload/vjudge_pic/UVA114/a67b17c6c4f176c28db24463c66f1b5914cdd9e6.png)

输入输出格式

输入格式


![](https://cdn.luogu.com.cn/upload/vjudge_pic/UVA114/d80cc22baf3747243ec80b699c0ec09cd9b6d14f.png)

输出格式


![](https://cdn.luogu.com.cn/upload/vjudge_pic/UVA114/2cfacf5634e408a15f3e4c1995da2b93c1a1a5c0.png)

输入输出样例

输入样例 #1

4 4
0
2
2 2 1 0
3 3 1 0
2 3 1 1
2 3 1 2
2 3 1 3
2 3 1 4
2 3 1 5

输出样例 #1

0
0
1
2
2
5