abc219F Cleaning Robot
本文译自 atcoder official editorial,由于改文特别详细的讲解了做法,固本文只对一些地方做稍微修改,以便于理解。
我们用
观察到,对于机器人每轮走的第
形式化地,我们让
V_1 = \lbrace (X_1, Y_1), (X_2, Y_2), \ldots, (X_N, Y_N) \rbrace
这里,
那么,将
V_2 = \lbrace (X_1 + a, Y_1 + b), (X_2 + a, Y_2 + b), \ldots, (X_N + a, Y_N + b) \rbrace
则我们可以推广到
V_k = \lbrace (X_1 + (k-1)a, Y_1 + (k-1)b), (X_2 + (k-1)a, Y_2 + (k-1)b), \ldots, (X_N + (k-1)a, Y_N+ (k-1)b) \rbrace
则过程如下,对于
-
-
-
\cdots -
这里,对于
如果不存在这样的整数
然后,像刚刚一样,关注
- 在第一次执行中,它第一次访问了方格
(X_i, Y_i) ; - 在第二次执行中,它第一次访问了方格
(X_i + a, Y_i + b) ; - 在第三次执行中,它第一次访问了方格
(X_i + 2a, Y_i + 2b) ; -
\cdots - 在
d_i 次执行中,它第一次访问了方格(X_i + (d_i-1)a, Y_i + (d_i-1)b) 。
然而,对于
-
它在
(d_i+1) 次执行过程中访问了方格(X_i + d_ia, Y_i + d_ib) ,但这不是它第一次访问该方格。
(根据d_i 的定义:(X_i + d_ia, Y_i + d_ib) \in V_1 。所以它在第一次执行时已经访问过)。 -
它在执行
(d_i+2) 次执行时访问了方格(X_i + (d_i+1)a, Y_i + (d_i+1)b) ,但这不是它第一次访问该方格。 -
它在
(d_i+3) 次执行时访问了方格(X_i + (d_i+2)a, Y_i + (d_i+2)b) ,但这不是它第一次访问该方格。 -
\cdots
等等。
因此,在对于字符串
因此,本题答案为:
\displaystyle\sum_{i = 1}^N \min(d_i, K)
所以,这个问题转化为如何找到数组
如果
首先,对于每个
q_i = \left\lfloor \displaystyle\frac{X_i}{a} \right\rfloor s_i = X_i - q_i a t_i = Y_i - q_i b
并根据
对于任意
(s_i, t_i) = (s_j, t_j) \Leftrightarrow (X_j, Y_j) = (X_i + (q_j-q_i)a, Y_i + (q_j-q_i)b)
因此,通过按
因此,我们总共可以用
code