更好的翻译
查看原帖
更好的翻译
759862
goodfish楼主2025/1/17 14:43

PS:

使用AI进行翻译,未经个人查证(仅供参考)

题目翻译

题目背景

模拟是一种计算机科学的重要应用领域,涉及开发计算机模型来洞察现实世界的事件。模拟的类型多种多样,包括(但不限于)离散事件模拟和时钟驱动模拟。模拟通常需要通过近似观察行为以开发出切实可行的方法。

题目描述

本题涉及对一个简化版弹球机的模拟。在弹球机中,钢球在一个平面上滚动,撞击各种物体(如弹簧板)并积累分数,直到钢球从平面上“消失”。

你的任务是编写一个程序,模拟一个理想化的弹球机。此弹球机的平面是一个带有障碍物(弹簧板和墙壁)的二维网格。平面被建模为一个 m×nm \times n 的网格,其坐标原点位于左下角。每个弹簧板占据一个网格点,网格边缘的格子是墙壁。钢球以初始位置、方向和寿命依次发射到网格中。

在本模拟中,所有位置均为整数,钢球的方向为以下四种之一:上、下、左或右。钢球在网格中弹跳,撞击弹簧板(累积分数)和墙壁(不增加分数)。撞击某个弹簧板时的得分为该弹簧板的分值。钢球的速度为每时间步移动一个网格单位。当钢球将移动到某个弹簧板或墙壁所在的网格点时,即算作“撞击”了该障碍物。每次撞击都会导致钢球“反弹”,即顺时针旋转90度,但不会进入障碍物所在的网格点,其位置不变(只有方向因反弹而改变)。注意,沿着墙壁滑动并不算作“撞击”墙壁。

钢球的寿命表示钢球在从平面上消失之前可以存活的时间单位数。钢球的每次网格移动都会消耗1单位的寿命,撞击障碍物也会消耗一定单位的寿命。撞击某个弹簧板或墙壁所消耗的寿命等于该障碍物的代价。当钢球撞击弹簧板时,只要其寿命仍为正数,就会获得该弹簧板的全部分值。注意,寿命为1的钢球将在下一次移动中“死亡”,因此无法在此最后移动中获得撞击弹簧板的分数。一旦寿命为非正数(0\leq 0),钢球即从平面上消失,游戏继续处理下一个钢球。

输入输出格式

输入格式

你的程序应模拟一次弹球游戏。输入包含若干行,描述游戏的参数:

  • 第一行包含两个整数 mmnn,用空格分隔,表示一个笛卡尔网格,网格范围为 1xm1 \leq x \leq m1yn1 \leq y \leq n。保证 2<m<512 < m < 512<n<512 < n < 51
  • 第二行是一个整数,表示撞击墙壁的代价。
  • 第三行是一个整数 p0p \geq 0,表示弹簧板的数量。
  • 接下来 pp 行,每行包含四个整数,分别表示弹簧板的 xx 坐标、yy 坐标、分值和代价,之间用空格分隔。所有弹簧板的坐标都在网格范围内,其分值和代价可以为任意整数(可能为负数,负代价表示钢球撞击后寿命增加)。
  • 剩余行描述钢球的信息,每行表示一个钢球,包含四个整数:钢球的初始 xx 坐标、初始 yy 坐标、移动方向和寿命。钢球的初始坐标在网格范围内,且不在弹簧板或墙壁上。移动方向为以下四种之一:0 表示沿 xx 轴正方向(右),1 表示沿 yy 轴正方向(上),2 表示沿 xx 轴负方向(左),3 表示沿 yy 轴负方向(下)。寿命是一个正整数。

输出格式

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

输入输出样例

输入样例 #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
2025/1/17 14:43
加载中...