P17713 Red Face 玩 pvz(game)
题目背景
题目来源:【HT-122-Div.3】核桃 CSP-J 组模拟赛
Red Face 很喜欢玩 pvz(植物大战僵尸),有一天,它看到了一个不太一样的游戏。
题目描述
**注意:本题的僵尸不会动!**
在一个 $10^9 \times 10^9$ 的二维平面上,有豌豆射手和僵尸两种单位。规定 $x$ 坐标增大方向为右,因此两个单位位于同一行,当且仅当它们的 $y$ 坐标相同。
在一个草地上,每秒 Red Face 都有一次操作:
- `1 x y`:在第 $x$ 行第 $y$ 列种植一个豌豆射手。
- `2 x y z`:在第 $x$ 行第 $y$ 列放置一个血量为 $z$ 僵尸。
在这一次操作后,攻击规则如下:
1. 每个豌豆射手在本轮中只会攻击一次。若其所在行的右边存在僵尸,则它会对右边第一个僵尸造成 $1$ 点伤害。这里的“右边第一个僵尸”,指与该豌豆射手的 $y$ 坐标相同、$x$ 坐标大于该豌豆射手,且 $x$ 坐标最小的僵尸。
2. 当某个僵尸在本轮被打死,即血量降至 $0$ 或更低时:
- 该僵尸会立即消失;
- 若攻击该僵尸的次数超过了它被攻击前的剩余血量,则超过的攻击会在同一轮继续顺延,攻击其右边的下一个僵尸;若下一个僵尸也被打死,则多余的攻击会继续向右顺延;
- 已经完成攻击的豌豆射手在本轮中不会再次攻击。从下一轮开始,它们会改为攻击其右边新的第一个僵尸。
3. 每轮攻击只执行一次。攻击结束后,输出当前所有存活僵尸血量的异或和。
输入格式
第一行输入一个数 $q$ 表示操作次数。
接下来的 $q$ 行输入三个或四个数,表示一次操作。
输出格式
对于每次操作,在攻击结束后输出一行一个整数,表示**当前所有存活僵尸的血量异或和**。
当所有操作执行完毕后,输出所有仍存活的单位:
- 豌豆射手输出:`1 x y`。
- 僵尸输出:`2 x y z`,其中 $z$ 为其剩余血量。
输出顺序要求如下:
1. 所有豌豆射手在前;
2. 同类单位按 $x$ 升序;
3. 若 $x$ 相同,则按 $y$ 升序。
说明/提示
### 样例解释
**对于样例 $1$:**
- 第一秒:在 $(1,2)$ 处种植了一个豌豆射手,没有僵尸,所以豌豆射手不攻击。
- 第二秒:在 $(3,2)$ 处放置了一个僵尸,此时豌豆射手攻击一次僵尸,僵尸血量为 $24-1=23$。
- 第三秒:在 $(2,2)$ 处放置了一个豌豆射手,此时两个豌豆射手各攻击一次僵尸,僵尸血量为 $23-2=21$。
:::info[对于样例 $2$:]
1. 在 $(1,1)$ 处放置了一个血量为 $50$ 的僵尸,血量异或和为 $50$。
2. 在 $(3,1)$ 处放置了一个血量为 $50$ 的僵尸,血量异或和为 $50 \oplus 50=0$。
3. 在 $(2,1)$ 处放置了一个豌豆射手,这个豌豆射手攻击了 $(3,1)$ 处的僵尸,血量异或和为 $50 \oplus 49=3$。
4. 在 $(4,1)$ 处放置了一个豌豆射手,$(2,1)$ 处豌豆射手攻击了 $(3,1)$ 处的僵尸,血量异或和为 $50 \oplus 48=2$。
5. 在 $(5,1)$ 处放置了一个豌豆射手,$(2,1)$ 处豌豆射手攻击了 $(3,1)$ 处的僵尸,血量异或和为 $50 \oplus 47=29$。
6. 在 $(8,1)$ 处放置了一个血量为 $50$ 的僵尸,$(2,1)$ 处豌豆射手攻击了 $(3,1)$ 处的僵尸,$(4,1),(5,1)$ 处豌豆射手各攻击了 $(8,1)$ 处的僵尸,血量异或和为 $50 \oplus 46 \oplus 48=44$。
7. 在 $(7,1)$ 处放置了一个豌豆射手,$(2,1)$ 处豌豆射手攻击了 $(3,1)$ 处的僵尸,$(4,1),(5,1),(7,1)$ 处豌豆射手各攻击了 $(8,1)$ 处的僵尸,血量异或和为 $50 \oplus 45 \oplus 45=50$。
8. 在 $(6,1)$ 处放置了一个豌豆射手,$(2,1)$ 处豌豆射手攻击了 $(3,1)$ 处的僵尸,$(4,1),(5,1),(6,1),(7,1)$ 处豌豆射手各攻击了 $(8,1)$ 处的僵尸,血量异或和为 $50 \oplus 44 \oplus 41=55$。
9. 在 $(1,2)$ 处放置了一个血量为 $50$ 的僵尸,$(2,1)$ 处豌豆射手攻击了 $(3,1)$ 处的僵尸,$(4,1),(5,1),(6,1),(7,1)$ 处豌豆射手各攻击了 $(8,1)$ 处的僵尸,血量异或和为 $50 \oplus 43 \oplus 37 \oplus 50=14$。
10. 在 $(2,2)$ 处放置了一个豌豆射手,$(2,1)$ 处豌豆射手攻击了 $(3,1)$ 处的僵尸,$(4,1),(5,1),(6,1),(7,1)$ 处豌豆射手各攻击了 $(8,1)$ 处的僵尸,血量异或和为 $50 \oplus 42 \oplus 33 \oplus 50=11$。
:::
**对于样例 $3$:**
请注意:僵尸如果在某一轮被打死了,它左边如果还有豌豆**会打到其右边的僵尸**上。
### 数据规模与约定
**本题采用捆绑测试和子任务依赖。**
::cute-table{tuack}
| 子任务 | $q\le$ | $x,y\le$ | 特殊性质 | 分值 | 子任务依赖 |
| :----: | :----: | :------: | :------: | :--: | :--------: |
| $0$ | $10^5$ | $10^9$ | A | $0$ | 无 |
| $1$ | $10$ | $8$ | 无 | $18$ | 无 |
| $2$ | $1000$ | $1000$ | ^ | $12$ | $1$ |
| $3$ | ^ | $10^9$ | ^ | $12$ | $1,2$ |
| $4$ | $10^5$ | $1000$ | ^ | $6$ | $1,2$ |
| $5$ | ^ | $10^9$ | B | $9$ | $1$ |
| $6$ | ^ | ^ | C | $9$ | $1$ |
| $7$ | ^ | ^ | 无 | $34$ | $0 \sim 6$ |
特殊性质:
- $A$:是样例。
- $B$:豌豆射手不超过 $10$ 个。
- $C$:僵尸不超过 $10$ 个。
对于 $100\%$ 的数据,保证:
- $1 \le x,y \le 10^9$
- $1 \le z \le 50$
- $1 \le q \le 10^5$
- 豌豆射手和僵尸的坐标互不相同。