QOJ.ac

QOJ

Time Limit: 1.0 s Memory Limit: 256 MB Total points: 100 Hackable ✓

#16111. Kickshot Tournament

الإحصائيات

欢迎来到 Kickshot 锦标赛,这是久负盛名的国际台球锦标赛(ICPC)的一部分!今年是一个特殊的年份,因为主办方决定在虚拟世界中举办比赛,而不是在现实生活中!

你正在一张大小为 $(R - 1) \times (C - 1)$ 的矩形台球桌上进行比赛。桌上的每个格点处都放置有一枚虚拟硬币,总共形成 $R \times C$ 枚硬币。坐标系采用 1-索引,位于第 1 行第 1 列的硬币位于左下角。行号向上递增,列号向右递增。

球被放置在位于第 $M$ 行第 $N$ 列的硬币上,并以右上方向 $45^\circ$ 的完美角度射出。最初,球每毫秒向上(朝行号增大的方向)移动一个单位,向右(朝列号增大的方向)移动一个单位。当球撞击顶部或底部边缘时,其垂直方向会反转;当球撞击左侧或右侧边缘时,其水平方向会反转。过程中没有能量损失——球会完美地持续反弹,直到落入四个角袋中的任意一个。

每当球经过一枚硬币时,该硬币会立即从桌面上消失。收集硬币不会影响球的轨迹。位于第 $M$ 行第 $N$ 列的硬币在射出时会被立即收集。过程持续进行,直到球到达某个角袋,此时球最终停止。

你的任务是确定球总共收集了多少枚硬币,包括起始位置的硬币和最终落入角袋时的硬币。

输入格式

第一行包含一个整数 $t$ ($1 \le t \le 10^5$),表示测试用例的数量。

对于每个测试用例,包含一行四个整数 $M$、$N$、$R$ 和 $C$ ($3 \le R, C \le 10^9, 1 \le M < R, 1 \le N < C, (M, N) \neq (1, 1)$),表示球的起始位置和台球桌的大小。

输出格式

对于每个测试用例,输出一行,包含一个整数 $X$,表示球收集的硬币总数。如果球永远无法到达任何一个角袋,则输出 $-1$。

样例

输入 1

3
3 4 6 8
2 3 6 7
4 3 7 10

输出 1

17
5
-1

说明

第一个测试用例可以可视化如下:

The ball path.

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.