[ABC219F]Cleaning Robot

Posted StaroForgin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[ABC219F]Cleaning Robot相关的知识,希望对你有一定的参考价值。

Cleaning Robot

题解

首先看到 ∣ S ∣ ⩽ 2 × 1 0 5 , k ⩽ 1 0 12 |S|\\leqslant 2\\times 10^5,k\\leqslant 10^{12} S2×105,k1012的数据范围,我们可以猜到复杂度其实跟 k k k没啥关系,大概率只与 ∣ S ∣ |S| S有关。
如果时直接去暴力找循环节的话,明显是不行的,因为每个位置的循环长度可能不一样,有可能我们的循环节会很长很长,也不好判断。但你如果直接将循环长度看成 ∣ S ∣ |S| S的话还可以过大部分点
我们可以考虑我们每次执行操作我们走到的点集的变化。
设我们第一轮执行操作的点集为 V 1 = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x n , y n ) } V_1=\\{(x_1,y_1),(x_2,y_2),...,(x_n,y_n)\\} V1={(x1,y1),(x2,y2),...,(xn,yn)},设 a = x n , b = y n a=x_n,b=y_n a=xn,b=yn,容易发现,我们第二轮执行操作的点集为 V 2 = { ( x 1 + a , y 1 + b ) , ( x 2 + a , y 2 + b ) , . . . , ( x n + a , y n + b ) } V_2=\\{(x_1+a,y_1+b),(x_2+a,y_2+b),...,(x_n+a,y_n+b)\\} V2={(x1+a,y1+b),(x2+a,y2+b),...,(xn+a,yn+b)}
由此观之,我们第 i + 1 i+1 i+1轮执行操作的点集为 V i = { ( x 1 + i a , y 1 + i b ) , ( x 2 + i a , y 2 + i b ) , . . . , ( x n + i a , y n + i b ) } V_i=\\{(x_1+ia,y_1+ib),(x_2+ia,y_2+ib),...,(x_n+ia,y_n+ib)\\} Vi={(x1+ia,y1+ib),(x2+ia,y2+ib),...,(xn+ia,yn+ib)}

于是,我们可以将整个过程覆盖的所有点看成 ∣ S ∣ |S| S条直线,而这些直线的斜率都是一样的。
注意,这里的斜率含义是不一样的,在 ( a , b ) = ( 2 , 2 ) (a,b)=(2,2) (a,b)=(2,2)时我们将 ( x , y ) (x,y) (x,y) ( x + 1 , y + 1 ) (x+1,y+1) (x+1,y+1)看成两条不一样的直线。
V 1 V_1 V1中的点 ( x i , y i ) (x_i,y_i) (xi,yi)的直线将会覆盖 ( x i + j a , y i + j b ) , j ∈ [ 0 , k ) (x_i+ja,y_i+jb),j\\in[0,k) (xi+ja,yi+jb),j[0,k)的所有点。
但这些点不免有交集,即 ( x i − x j , y i − y j ) = d ( a , b ) , d ∈ [ 0 , k ) (x_i-x_j,y_i-y_j)=d(a,b),d\\in[0,k) (xixj,yiyj)=d(a,b),d[0,k)会使得一个点走出去一会后就走到另一个点上。
我们可以存下来每个点走多少步会走到另一个点上,设点 i i i需要走 d i d_{i} di步移动到另一个点。
如果 d i > k d_{i}>k di>k,很明显,我们怎么走都不会让这个点撞到其它点,直接加上 k k k即可。
否则,它在 k k k步以内就会碰到其它点,那么它只有在碰到其它点前的点才是有效的,所以对于这样的点,答案应该加上 d i d_{i} di

但我们怎么判断一个点走多少步才能碰到别的点呢?
显然,我们可以利用差分的思想,对于每条直线找到一个定点,记作 ( x 0 , y 0 ) (x_0,y_0) (x0,y0)
( x i , y i ) = ( x 0 , y 0 ) + d i ( a , b ) (x_i,y_i)=(x_0,y_0)+d_{i}(a,b) (xi,yi)=(x0,y0)+di(a,b) ( x j , y j ) = ( x 0 , y 0 ) + d j ( a , b ) (x_j,y_j)=(x_0,y_0)+d_{j}(a,b) (xj,yj)=(x0,y0)+以上是关于[ABC219F]Cleaning Robot的主要内容,如果未能解决你的问题,请参考以下文章

Data Cleaning 3

Data Cleaning 5

structure needs cleaning

Cleaning Shifts

data cleaning

poj 2376 Cleaning Shifts