前言
期望:100+70+0=170
实际:40+0+0=40
rnk14
分全部挂没了,太行了。
T1不开longlong见祖宗,而且KH说的那个也有道理,带权之后树的重心可以不只有两个,所以最后还应该倍增的跳。(然而这个地方题解似乎都忽略了)
T2线性筛写挂身败名裂。
T3根本没摸,本来还打算至少敲个暴力来着,但被T2心态搞炸了。
题目解析
树的核心(core)
我、kH、pdf一边一个做法的一道题。
但是必须承认pdf的做法实现是最简单的。
我这个题的做法倒是出的很快,差不多8:30就出思路了。
我的做法是找到当前加一的部分的重心,新重心一定在旧重心和原来这个重心的路径上。
代码实现的很不好,写拍调整到十点。
pdf思路:答案的子树权值大小必然严格大于总权值一半,那么在dfs序的线段树上按照点权二分,找到权值中点对应的结点,其必然在答案的子树内,也就是说,答案必然在该结点的返祖链上。
往上倍增的找即可。
随机填数(random)
写完T1看这题。
是我之前做过的一道CF的多测板。
按照CF的做法有70。
一方面给了我方便,也某种程度上限制了我的思维罢。
但这题我也确实做不出来,需要的那个技巧根本就不在我脑子的“寄存器”里,估计很难访问到了。
一个重要结论:
E
(
x
)
=
∑
i
=
1
P
(
x
≥
i
)
E(x)=\sum_{i=1}P(x\ge i)
E(x)=i=1∑P(x≥i)
较为显然,之前也见到过,但没有特别上心。
然而,本题后面这个概率却能很方便的求出。
首先分母很好办,就是
m
i
−
1
m^{i-1}
mi−1。
x
≥
i
x\ge i
x≥i 也就等价于
[
1
,
i
−
1
]
[1,i-1]
[1,i−1] 的序列的
gcd
\gcd
gcd 大于1(只考虑
i
>
1
i>1
i>1)。那么我们考虑补集,也就是
gcd
=
1
\gcd=1
gcd=1 的序列有多少个:
∑
a
1...
i
−
1
[
(
a
1
,
a
2
,
.
.
.
,
a
i
−
1
)
=
1
]
\sum_{a_{1...i-1}}[(a_1,a_2,...,a_{i-1})=1]
a1...i−1∑[(a1,a2,...,ai−1)=1]
=
∑
a
1...
i
−
1
∑
d
∣
(
a
1
,
a
2
,
.
.
.
,
a
i
−
1
)
μ
(
d
)
=\sum_{a_{1...i-1}}\sum_{d|(a_1,a_2,...,a_{i-1})}\mu(d)
=a1...i−1∑d∣(a1,a2,...,ai−1)∑μ(d)
=
∑
d
=
1
m
μ
(
d
)
⌊
m
d
⌋
i
−
1
=\sum_{d=1}^m\mu(d)\lfloor\frac m d \rfloor^{i-1}
=d=1∑mμ(d)⌊dm⌋i−1
那么我们其实就是求:
∑
i
=
2
∞
P
(
x
≥
i
)
+
1
\sum_{i=2}^{\infty}P(x\ge i)+1
i=2∑∞P(x≥i)+1
=
∑
i
=
2
∞
m
i
−
1
−
∑
d
=
1
m
μ
(
d
)
⌊
m
d
⌋
i
−
1
m
i
−
1
+
1
=\sum_{i=2}^{\infty}\frac{m^{i-1}-\sum_{d=1}^m\mu(d)\lfloor\frac m d \rfloor^{i-1}}{m^{i-1}}+1
=i=2∑∞mi−1mi−1−∑d=1mμ(d)⌊dm⌋i−1+1
=
∑
i
=
1
∞
m
i
−
∑
d
=
1
m
μ
(
d
)
⌊
m
d
⌋
i
m
i
+
1
=\sum_{i=1}^{\infty}\frac{m^i-\sum_{d=1}^m\mu(d)\lfloor\frac m d \rfloor^{i}}{m^i}+1
=i=1∑∞mimi−∑d=1mμ(d)⌊dm⌋i+1
=
1
−
∑
i
=
1
∞
∑
d
=
2
m
μ
(
d
)
⌊
m
d
⌋
i
m
i
=1-\sum_{i=1}^{\infty}\frac{\sum_{d=2}^m\mu(d)\lfloor\frac m d \rfloor^{i}}{m^i}
=1−i=1∑∞mi∑d=2mμ(d)⌊dm⌋i
=
1
−
∑
d
=
1
m
μ
(
d
)
∑
i
=
1
∞
⌊
m
d
⌋
i
m
i
=1-\sum_{d=1}^m\mu(d)\sum_{i=1}^{\infty}\frac{\lfloor\frac m d \rfloor^{i}}{m^i}
=1−d=1∑mμ(d)i=1∑∞mi⌊dm⌋i
=
1
−
∑
d
=
1
m
μ
(
d
)
⌊
m
d
⌋
m
−
⌊
m
d
⌋
=1-\sum_{d=1}^m\mu(d)\frac{\lfloor\frac m d \rfloor}{m-\lfloor\frac m d \rfloor}
=1−d=1∑mμ(d)m−⌊dm⌋⌊dm⌋
预处理
μ
\mu
μ 的前缀和,整除分块即可做到单次
O
(
n
)
O(\sqrt n)
O(n)。
等权划分(value)
由于本次考试上来就对T1有了思路,调完T1又一直在T2挣扎,所以这个题几乎没有摸。
因而谈不太上考场感受,但是看题解感觉我应该是做不出来的。
三个关键点,我的评价分别是:很难想到,很难想到,很难想到。
毕竟做题可是且运算,卡一个地方这题就没了。
由于字典序优秀的贪心性质,我们可以每次都尽可能的尝试填A,然后判断接下来的局面是否有解。
那么问题就转化为了对于一个局面,如何快速判断有无解。
关键性质:如果一个局面有解,那么必然可以构造一种合法方案,使得一个序列中的合法点都是完整原序列的前缀最大值(其必然也所在序列的合法点,以下简称必大点)。
证明:如果一个序列存在非必大点的合法点,那么其前方第一个必大点必然在另一个序列里。那么若两个序列都存在非必大点的合法点,令两个对应的必大点互换位置,即可保证合法点数都减一的同时,使非必大点个消失一个。不断如此操作,至少有一个序列的合法点全是必大点。
(个人感觉证明倒不是特别难,但真的很难独立猜出这种鬼马结论并认为它有用…)
我们强制令一个序列全是必大点(注意这个序列即可以是A,也可以是B,下面假设其为B)。若后边还有
c
c
c 个必大点,A选的合法点中必大点和非必大点分别有
p
,
q
p,q
p,q 个,A、B当前选的合法点有
f
a
,
f
b
fa,fb
fa,fb 个,那么就有:
f
a
+
p
+
q
=
f
b
+
c
−
p
fa+p+q=fb+c-p
fa+p+q=fb+c−p
整理得:
2
p
+
q
=
f
b
−
f
a
+
c
2p+q=fb-fa+c
2p+q=fb−fa+c
其中右边的东西对于某个确定局面为定值,设其为
w
w
w。令A序列选取必大点为合法点的价值为2,非必大点的价值是1,那么就要求存在一种选点方案使得总权值为
w
w
w。
结论:对于一个残局,一个子序列S可以成为A的合法点序列的充要条件是其递增。并且可以使B序列只选取该子序列外的必大点作为合法点。
(这个pdf没有细讲,但我觉得还是需要讲一下的)
证明:前缀最大值必然递增,必要性显然。充分性尝试构造性证明:对于一个递增子序列S,从前往后考虑每个元素划分到哪里。对于一个属于S的元素,直接给A,否则,若是必大点,直接给B,否则,其前面必然存在比它大的元素x,把当前元素划分到x所在的序列即可。
又注意到,由于元素只有1或2,那么如果权值x是合法的,那么x-2必然也是合法的。所以我们只需要对奇权值和偶权值分别从后往前做一遍带权LIS并互相转移,每次在 w w w 奇偶性对应的线段树上查询是否不小于 w w w 即可。