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$ - 豌豆射手和僵尸的坐标互不相同。