[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}
∣S∣⩽2×105,k⩽1012的数据范围,我们可以猜到复杂度其实跟
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)
(xi−xj,yi−yj)=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的主要内容,如果未能解决你的问题,请参考以下文章