CF1970F2 Playing Quidditch (Medium)
题目描述
今天下午,你决定出门感受春天的气息。当你走到魁地奇球场附近时,突然听到有人大喊。果然,又是在争谁赢了比赛!为了避免这一情况再次发生,你决定参与到比赛的判罚当中。
你留在体育场观看比赛,并记录得分。比赛结束时,你将宣布获胜者。
今天参赛的两支队伍是:红色的格兰芬多(R)和蓝色的拉文克劳(B)。每队有 $P$ 名球员($1 \leq P \leq 10$)。
场地是一个 $N$ 行 $M$ 列的矩形($3 \leq N, M \leq 99$,$N$ 和 $M$ 均为奇数)。所有位置都是整数值,并且允许多个实体同时位于同一位置。比赛开始时,场地上有两队的球门(每队有一个到五个球门)、球员以及一个鬼飞球。在这一版本的问题中,可能还会出现一个游走球。而在更难的版本中,还会有另一种球。
比赛由 $T$ 个步骤组成($0 \leq T \leq 10000$)。每一步中,场上的一个实体(球员或者球)都会执行一个动作。所有实体都可以移动。球员还可以接球或者投掷手中的鬼飞球。要接球,球员必须与球处于同一格子。当球员持有鬼飞球时,鬼飞球不会进行任何动作,只是随球员一起移动。如果球员决定投出鬼飞球,它将留在球员当前的位置。如果球员和游走球同时处于同一格子(无论是球员移动还是游走球移动导致的结果),该球员将被淘汰。如果球员被淘汰时正持球,鬼飞球将留在原地,与淘汰球员和游走球同处一格。可以保证不会在球员位于球门时发生这种情况。
想要得分,球员必须将鬼飞球放在对方的球门。当球员得分时,该球员的队伍获得一分,鬼飞球将立即移动至场地中央(从1开始计数的第 $(N+1)/2$ 行、第 $(M+1)/2$ 列)。中央没有球门。如果球员把球放进自家球门,那对方队伍将获得一分。
输入格式
第一行是两个整数表示场地大小:$N$ 和 $M$。
接下来是场地的描述:共 $N$ 行,每行有 $M$ 个字符对,以空格分隔。每个字符对表示场地上的一个位置,可以是以下形式之一:
- `..` 表示空格
- `R0`, ..., `R9`, `B0`, ..., `B9` 表示球员。第一个字符是球员所在的队伍,第二个字符是球员的编号。每个字符对都是唯一的,但不保证所有可能的字符对都会出现在网格中。
- `RG` 或 `BG` 表示球门。蓝队尝试将球踢进红队球门(`RG`),而红队则尝试将球踢进蓝队球门(`BG`)。
- `.Q` 表示鬼飞球,这是球员用来得分的球。
- `.B` 表示游走球。
接下来的一行包含一个整数 $T$,表示构成比赛的动作数量。随后有 $T$ 行,每行描述一个动作。行中有多个信息,用空格分隔。首先是一对字符,表示执行动作的实体。接着是动作的描述:
- `U`, `D`, `L`, `R` 表示实体在网格上的移动方向。可以分别向上(`U`)、向下(`D`)、向左(`L`)或向右(`R`)移动。每次只移动一个格子。
- `C` 表示球员接住了球(只有球员可以接球)。随后是一个空格和一个字符对,表示被接住的球。需要此信息,因为可能多个球在同一格子中。
- `T` 表示球员投出了携带的鬼飞球。
所有动作都是有效的:即球员始终在场地范围内,球员不会在非同格子时接球,不会在未携球时投球,等等。
输出格式
你需要输出比赛中的主要事件,每行一个。具体事件包括:
- 每次一支队伍得分时,你需要输出 `t RED GOAL` 或 `t BLUE GOAL`,取决于哪支队伍得分,其中 `t` 是当前动作位置(从0开始计数)。如果球员进错门(红队球员进红队球门,或蓝队球员进蓝队球门),则输出获分的另一队伍。
- 每次有球员被淘汰时,输出 `t p ELIMINATED`,其中 `t` 是当前时间 `p` 是被淘汰的球员。球员的格式与输入相同。
事件按 `t` 的升序输出。如果多名球员同时被淘汰,按字母顺序输出:`B0`, ..., `B9`, `R0`, ... `R9`。
比赛结束时,输出最终比分为:`FINAL SCORE: r b`,其中 `r` 和 `b` 分别是红队和蓝队的得分。
说明/提示
在第一个例子中,红队球员拿起鬼飞球,移动并投出。蓝队球员接住球,向红队球门进攻并取得分数。
在第二个例子中,红队球员拿球并不小心把它投入自家球门,结果蓝队得分。
在第三个例子中,游走球移动到 `R0` 的位置,导致 `R0` 被淘汰。随后,`B0` 也移到游走球的位置,结果 `B0` 也被淘汰。
**本翻译由 AI 自动生成**