QOJ.ac

QOJ

実行時間制限: 10.0 s メモリ制限: 512 MB 満点: 100 ハック可能 ✓

#7530. 去玩核桃保龄球吧!

統計

著名的电脑游戏“植物大战僵尸”中有一个坚果保龄球模式。 在这个模式中,僵尸从右向左移动,玩家可以向它们发射坚果,坚果在撞击僵尸时会反弹。你的任务是模拟这个坚果保龄球游戏。 请注意,本题中使用的规则与原版游戏不同!

游戏在一个大小为 $M \times N$ 的单元格网格上进行。在任何时刻,场上的某些单元格中可能存在僵尸,且每个单元格内最多只有一个僵尸。 玩家可以从场上的任意单元格发射坚果。发射后,坚果立即水平向右滚动,直到第一次遇到僵尸。 每次与僵尸碰撞后,坚果会反弹并继续沿对角线移动:向右上方或右下方。 如果这不是第一次碰撞,坚果会沿另一条对角线继续移动:如果它之前是从左下方滚来的,那么它会向右下方反弹,反之亦然。如果是第一次碰撞,则根据玩家发射坚果的方式选择两条对角线中的一条。 当坚果滚出场地的右侧、下方或上方时,其运动结束。

因此,坚果在场地上画出一条之字形轨迹。如果玩家从一个有僵尸的单元格发射坚果,那么坚果会立即击中该僵尸并反弹。在本题中,我们假设坚果滚动速度极快,发射过程耗时为零。

所有僵尸以单位速度从右向左移动,即每秒移动一个方格。当僵尸离开场地时,它会进入你的房子并排队准备吃掉你的大脑,此后不再参与游戏。 此外,新的僵尸会不时出现在游戏中。 保护自己免受僵尸侵害的唯一方法是用坚果击败它们! 每个僵尸都有一个护甲值。每次坚果击中僵尸,其护甲值就会减少 1。如果由于撞击,护甲值减为零,则该僵尸倒下,即从游戏中完全消失。

初始场地为空。 你的任务是执行 $Q$ 个以下三种类型的查询: 等待 $t$ 秒,让僵尸向左移动和/或进入房子。 从给定单元格发射坚果,击中并可能摧毁一些僵尸。 * 在给定单元格添加一个新僵尸。

发射坚果和添加僵尸的操作耗时可忽略不计,但所有请求必须严格按照给定的顺序执行。

输入格式

输入的第一行包含三个整数:$M$ 为行数,$N$ 为列数,$Q$ 为查询次数 ($1 \le M, N \le 10^7$, $1 \le Q \le 3 \cdot 10^5$)。 接下来的 $Q$ 行包含查询,按顺序每行一个。每个查询由命令描述及其后的若干整数组成。

  • time t — 等待 $t$ 秒 ($1 \le t \le 10^7$)。你需要输出一个整数 — 在该时间间隔内离开场地并进入排队准备吃掉你大脑的僵尸数量。
  • deliver r c s — 发射坚果。其中 $r$ 和 $c$ 是坚果起始单元格的行号和列号 ($1 \le r \le M, 1 \le c \le N$),$s$ 决定了反弹方向:$-1$ 表示右上方, $1$ 表示右下方。你需要输出两个整数 — 此次发射的弹跳次数和摧毁的僵尸数量。
  • add r c h — 添加僵尸。其中 $r$ 和 $c$ 是添加僵尸的单元格的行号和列号 ($1 \le r \le M, 1 \le c \le N$),$h$ 是初始护甲值 ($1 \le h \le 10^6$)。

当坚果向下移动时,行索引增加;当坚果向右移动时,列索引增加。 你可以假设僵尸永远不会被添加到已有僵尸的单元格中。你可以假设 time 查询中 $t$ 的总和不超过 $10^9$。

输出格式

在输出的第一行打印文本 stdout ducks,因为这个游戏里的僵尸使用鸭子。 然后打印 timedeliver 查询的答案,每个答案占一行。

样例

输入 1

6 8 23
add 2 4 2
add 3 7 1
add 4 6 3
add 5 3 3
add 6 4 3
deliver 1 1 1
deliver 5 1 1
deliver 5 1 -1
deliver 2 4 1
deliver 5 1 1
time 2
add 4 4 3
deliver 2 1 1
deliver 6 1 -1
time 7
add 2 3 1
add 2 6 1
add 3 3 1
add 4 4 1
deliver 2 5 1
add 3 7 10
deliver 3 2 1
time 5

输出 1

stdout ducks
0 0
3 0
1 0
3 1
3 2
0
2 1
2 1
1
1 1
2 2
1

Figure 1. 坚果在场地上画出一条之字形轨迹

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.