cf1553F. Pairwise Modulo
Posted Jozky86
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cf1553F. Pairwise Modulo相关的知识,希望对你有一定的参考价值。
题意:
给你一个数组a,a由n个不同的数组成,让你求出对应的数组p
数组p的定义为:
p
k
=
∑
1
≤
i
,
j
≤
k
a
i
m
o
d
a
j
p_{k}=\\sum_{1\\leq i,j\\leq k}a_{i} \\mod a_{j}
pk=∑1≤i,j≤kaimodaj
题解:
官方题解
首先我们需要拜托mod操作,一个常用公式:
x
m
o
d
y
=
x
−
y
∗
⌊
x
y
⌋
x \\mod y = x - y * \\lfloor \\frac{x}{y} \\rfloor
xmody=x−y∗⌊yx⌋
直接求p比较麻烦,我们规定i,j一个先后顺序,我们将
p
k
p_{k}
pk分成
s
k
s_{k}
sk和
t
k
t_{k}
tk两个部分
s
k
=
∑
1
≤
i
,
j
≤
k
,
i
>
j
a
i
m
o
d
a
j
s_{k}=\\sum_{1\\leq i,j\\leq k,i>j}a_{i} \\mod a_{j}
sk=∑1≤i,j≤k,i>jaimodaj
t
k
=
∑
1
≤
i
,
j
≤
k
,
i
<
j
a
i
m
o
d
a
j
t_{k}=\\sum_{1\\leq i,j\\leq k,i<j}a_{i} \\mod a_{j}
tk=∑1≤i,j≤k,i<jaimodaj
也就是
s
k
s_{k}
sk求的是编号大的数mod编号小的数的和,
t
k
t_{k}
tk则正好相反。
怎么求
s
k
s_{k}
sk?
s
k
=
s
k
−
1
+
∑
i
=
1
k
−
1
a
k
m
o
d
a
i
=
s
k
−
1
+
∑
i
=
1
k
−
1
(
a
k
−
a
i
∗
⌊
a
k
a
i
⌋
)
s_{k}=s_{k-1}+\\sum_{i=1}^{k-1}a_{k} \\mod a_{i}=s_{k-1}+\\sum_{i=1}^{k-1}(a_{k}-a_{i}*\\lfloor\\frac{a_{k}}{a_{i}} \\rfloor)
sk=sk−1+∑i=1k−1akmodai=sk−1+∑i=1k−1(ak−ai∗⌊aiak⌋)
我们将
a
k
a_{k}
ak提出来会得到:
s
k
=
s
k
−
1
+
a
k
∗
(
k
−
1
)
−
∑
i
=
1
k
−
1
(
a
i
∗
⌊
a
k
a
i
⌋
)
s_{k}=s_{k-1}+a_{k}*(k-1)-\\sum_{i=1}^{k-1}(a_{i}*\\lfloor \\frac{a_{k}}{a_{i}} \\rfloor)
sk=sk−1+ak∗(k−1)−∑i=1k−1(ai∗⌊aiak⌋)
现在问题就是
∑
i
=
1
k
−
1
(
a
i
∗
⌊
a
k
a
i
⌋
)
\\sum_{i=1}^{k-1}(a_{i}*\\lfloor \\frac{a_{k}}{a_{i}} \\rfloor)
∑i=1k−1(ai∗⌊aiak⌋)咋求
我们现在开始确定
a
i
a_{i}
ai,然后看其对所有
s
k
s_{k}
sk,k>i的贡献
- 对于所有的 a k a_{k} ak在 [ a i , 2 ∗ a i ) [a_{i},2*a_{i}) [ai,2∗ai)贡献是 − a i -a_{i} −ai
- 对于所有的 a k a_{k} ak在 [ 2 ∗ a i , 3 ∗ a i ) [2*a_{i},3*a_{i}) [2∗ai,3∗ai)贡献是 − 2 ∗ a i -2*a_{i} −2∗以上是关于cf1553F. Pairwise Modulo的主要内容,如果未能解决你的问题,请参考以下文章