ABC219F

题面

link

​ 有一个机器人一开始在\((0,0)\),之后会按一条包含L、R、U、D组成的字符串上下左右地走路,机器人将执行的这条字符串K(\(K\le 10^{12}\))次。求结束时走过的不同的方块数。

题解

​ 先考虑第一次机器人经过的点的集合\(V=\{(X_i,Y_i)\}\),以及第一次结束时机器人所在的点\((a,b)\)。考虑之后每次机器人经过的点的集合\(V_j=\{(X_i+(j-1)a,Y_i+(j-1)b)\}\)

​ 设\(d_i=\)最小的j满足\((X_i+ja, Y_i+jb) \in V_1\),如果不存在,就是正无穷。

​ 然后发现,随着机器人操作次数的增加,一旦当前操作次数\(j\)超过了\(d_i\),那么之后的\((X_i+(j-1)a,Y_i+(j-1)b\)一定不会是没有经过的点。

​ 所以答案就是\(\sum\limits_{i=1}^n\min(d_i,K)\)

​ 考虑求\(d_i\),设\(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\)

​ 这要,其实是对每个点的\(X_i\)\(a\)取模,因为如果\(X_i\ne X_j(\mod a)\)那么是不可能有\(k\)存在使\(X_i+ka=X_j\)

​ 而如果\(Y_i-q_ib\ne Y_j-q_jb\)的话那你也是无论如何也不能在保证\(X_i=X_j\)的时候使\(Y_i=Y_j\)

​ 这样,只需要给\((s_i,t_i)\)开一个vector,存贮所有的\(q_i\),然后从小到大排序,后一个的\(d_i\)就是\(q_i-q_{i-1}\)

启发

  • 要找这种\((X_i+ja,Y_i+jb)=(X_k,Y_k)\)关系,就把\(X_i,Y_i\)按上面的处理方法。
  • 对问题的分析也很厉害!
posted @ 2022-02-17 17:04  qwq_123  阅读(46)  评论(0编辑  收藏  举报