UVA114 Simulation Wizardry

题目描述

本题涉及对一个简化版弹球机的模拟。在弹球机中,钢球在一个平面上滚动,撞击各种物体(如弹簧板)并积累分数,直到钢球从平面上“消失”。 你的任务是编写一个程序,模拟一个理想化的弹球机。此弹球机的平面是一个带有障碍物(弹簧板和墙壁)的二维网格。平面被建模为一个 $m \times n$ 的网格,其坐标原点位于左下角。每个弹簧板占据一个网格点,网格边缘的格子是墙壁。钢球以初始位置、方向和寿命依次发射到网格中。 在本模拟中,所有位置均为整数,钢球的方向为以下四种之一:上、下、左或右。钢球在网格中弹跳,撞击弹簧板(累积分数)和墙壁(不增加分数)。撞击某个弹簧板时的得分为该弹簧板的分值。钢球的速度为每时间步移动一个网格单位。当钢球将移动到某个弹簧板或墙壁所在的网格点时,即算作“撞击”了该障碍物。每次撞击都会导致钢球“反弹”,即顺时针旋转 $90$ 度,但不会进入障碍物所在的网格点,其位置不变(只有方向因反弹而改变)。注意,沿着墙壁滑动并不算作“撞击”墙壁。 钢球的寿命表示钢球在从平面上消失之前可以存活的时间单位数。钢球的每次网格移动都会消耗1单位的寿命,撞击障碍物也会消耗一定单位的寿命。撞击某个弹簧板或墙壁所消耗的寿命等于该障碍物的代价。当钢球撞击弹簧板时,只要其寿命仍为正数,就会获得该弹簧板的全部分值。注意,寿命为 $1$ 的钢球将在下一次移动中“死亡”,因此无法在此最后移动中获得撞击弹簧板的分数。一旦寿命为非正数($\le 0$),钢球即从平面上消失,游戏继续处理下一个钢球。

输入格式

你的程序应模拟一次弹球游戏。输入包含若干行,描述游戏的参数: - 第一行包含两个整数 $m$ 和 $n$,用空格分隔,表示一个笛卡尔网格,网格范围为 $1\le x\le m$ 和 $1\le y\le n$。保证 $2

输出格式

对于输入中的每个钢球,按输入顺序每行输出一个整数,表示该钢球所累积的分数。最后输出一个整数,表示所有钢球累积分数的总和。