P13487 [GCJ 2008 Finals] Ping Pong Balls

题目描述

一个大房间里布满了捕鼠夹,这些捕鼠夹按网格排列。每个捕鼠夹上都装有两个乒乓球,精心放置,使得当捕鼠夹被触发时,这两个乒乓球会被弹射出去,落到其他捕鼠夹上并触发它们。房间的墙壁是粘性的,任何碰到墙壁的球都会被吸收。 每当一个捕鼠夹被击中时,会以相同的方式发射两颗乒乓球:它们的运动由相对于发射捕鼠夹的 $X$ 和 $Y$ 位移决定。你可以选择向房间发射一颗乒乓球。它会击中某个捕鼠夹,触发它并发射出两颗球。这两颗球又会触发另外两个捕鼠夹,然后又有四颗球飞出……当一切尘埃落定时,许多捕鼠夹被触发,但仍有一些捕鼠夹没有被任何球击中。 你需要计算最终会有多少个捕鼠夹被触发。 例如(见第一个样例),下图展示了一个宽为 $5$,高为 $3$ 的房间。每个捕鼠夹发射的两颗乒乓球的方向分别为 $(-1, 0)$ 和 $(-1, -1)$。你最初发射的球击中了位置 $(4, 2)$ 的捕鼠夹。最终,共有 $12$ 个捕鼠夹被触发。 ![](https://cdn.luogu.com.cn/upload/image_hosting/nkjg7gfg.png)

输入格式

输入的第一行为测试用例数 $C$。接下来有 $C$ 组测试数据。每组数据包含四行。 第一行为捕鼠夹网格的尺寸(即房间的尺寸),给出宽度 $W$ 和高度 $H$。 接下来的两行分别给出两颗乒乓球的目的地,以 $X$ 和 $Y$ 的位移表示。例如,如果这两行为 $0\ 1$ 和 $1\ 1$,则触发一个捕鼠夹会发射两颗球:一颗会击中正上方的捕鼠夹,另一颗会击中右上方的捕鼠夹。 最后一行为两个整数,分别表示最初被乒乓球击中的捕鼠夹的列和行($0\ 0$ 表示左下角的捕鼠夹)。

输出格式

对于每组测试数据,输出一行,格式为 "Case #$A$: $B$",其中 $A$ 表示测试用例编号(从 $1$ 开始),$B$ 表示被触发的捕鼠夹总数(包括最初被击中的那个)。

说明/提示

**数据范围** - $1 \leq C \leq 100$ - $-20 \leq \text{任意位移} \leq 20$ - 两个位移向量都不会是零向量。 **小数据范围(4 分,测试点 1 - 可见)** - $2 \leq W, H \leq 100$ **大数据范围(11 分,测试点 2 - 隐藏)** - $2 \leq W, H \leq 1000000$ 由 ChatGPT 4.1 翻译