CF152B Steps
题目描述
有一天,Vasya 出去在院子里散步,但外面没有他的朋友,他没人一起玩“捉跑”游戏。不过,男孩依然兴致高昂,决定与自己玩“捉跑”。你可能会问:“他是怎么做到的?”答案很简单。
Vasya 注意到院子是一个 $n×m$ 的矩形场地。每个格子的坐标为 $(x,y)$($1 \leq x \leq n, 1 \leq y \leq m$),其中 $x$ 为行号,$y$ 为列号。
最开始,Vasya 站在坐标为 $(x_c, y_c)$ 的格子上。为了玩游戏,他手上有一份由 $k$ 个非零长度的向量 $(dx_i, dy_i)$ 组成的列表。游戏规则如下:男孩依次按照 $1$ 到 $k$ 的顺序,把列表里的向量依次作为当前向量。选定向量后,Vasya 会在该方向上尽可能多地走有效步数(也可能一步不走)。
所谓“步”指的是从当前所在的格子,沿当前向量方向移动一格。也就是说,如果 Vasya 现在在 $(x,y)$,当前向量为 $(dx,dy)$,则一步之后他会到达 $(x+dx, y+dy)$。若这一步不走出院子的范围,该步即为“有效步”。
Vasya 按照所有向量方向依次不断地移动,直到用完向量列表。他移动了太久,已经忘记自己总共走了多少步。请帮他计算一下,他总共走了多少步。
输入格式
第一行包含两个整数 $n$ 和 $m$($1\leq n, m \leq 10^9$),表示院子的尺寸。
第二行包含两个整数 $x_c$ 和 $y_c$,表示初始格子的坐标($1\leq x_c \leq n, 1\leq y_c \leq m$)。
第三行包含一个整数 $k$($1\leq k \leq 10^4$),表示向量的数量。接下来有 $k$ 行,每行包含两个整数 $dx_i$ 和 $dy_i$ ($|dx_i|, |dy_i| \leq 10^9, |dx| + |dy| \geq 1$)。
输出格式
输出一个整数,表示 Vasya 总共走了多少步。
注意,请不要在 C++ 中使用 %lld 读取或输出 64 位整数。建议使用 cin, cout 流或 %I64d。
说明/提示
在第一个样例中,Vasya 最初站在 $(1,1)$,他按照第一个向量 $(1,1)$ 走了 $3$ 步,依次经过 $(2,2)、(3,3)、(4,4)$。随后第二个向量 $(1,1)$ 不能走任何步。第三个向量 $(0,-2)$ 可以走 $1$ 步,最终停在 $(4,2)$。总共 Vasya 走了 $4$ 步。
在第二个样例中,Vasya 最初站在 $(1,2)$,第一个向量 $(-1,0)$ 不能走任何步,因为再往下就走出院子了。
由 ChatGPT 5 翻译