$\newcommand{le}{\leqslant}\newcommand{ge}{\geqslant}$

CodeForces Round #580 (CF1205) 学习

考场状况

B题最小环写不清楚一直挂,还好先写了C题,由于不确定做法是否完善讨论很多类,又花了大量时间。

比赛结束前半小时家人提醒我开D, 我说D肯定比C要难,半小时肯定做不完。(Flag)

赛后学习,先想了想 D 怎么做菊花图,想到大步小步,一半边取小步 $1$, 另一半取大步 $\left\lfloor{n-1\over2}\right\rfloor+1$, 然后搬到一般树上也可以这么干,找到重心排序切开就至少能剖出 $\frac23$, 半小时过掉了。

B. Shortest Cycle

题意:给定 $60$ 元集合的 $n$ 个子集,若两子集交非空连边,求最小环。

笔记:剔除空集后如果还剩余多于 $120$ 个集合,则必然存在三个集合交非空,答案必然为 $3$. 否则直接 Floyd 求最小环。注意最小环的贡献式是 $d_{k-1}(i, j)+w_{ik}+w_{jk}$.

E. Expected Value Again

题意:当字符集大小为 $k$ 时求 $n$ 位均匀随机字符串 $s$ 的非平凡前后缀个数平方期望。

笔记:设 $f_i(s)=[s[:i]=s[-i:]]$. $s[:i]=s[-i:]$ 实际上限定了 $s$ 具有长度为 $n-i$ 的循环节。如果 $i=j$ 一定有 $E(f_i(s)f_j(s))=E(f_i(s))=k^{-i}$.

当 $i \ne j$ 时,不妨设 $i < j$, 设 $i'=n-i$, $j'=n-j$. 建立一个 $i'$ 点环,若 $k+j' < n$, 连接 $k$ 与 $(k+j') \bmod i'$.

当 $i'+j'\le n$ 时显然有模 $(i', j')$ 的每个剩余类连成一个环。当 $i'+j' > n$ 时有 $n-j'$ 条边,因此连通块数为 $i'+j'-n$ 加上环数。模 $(i', j')$ 意义下,一个剩余类要是能形成环,一定是因为其最大数仍然小于 $n-j'$. 剩余类的最大数分别是 $i'-(i', j'), i'-(i', j')+1, \ldots, i'-1$, 因而有 $\max\{n-i'-j'+(i', j'), 0\}$ 个环,连通块数就是 $\max\{(i', j'), i'+j'-n\}$.

因此 $E(f_i(s)f_j(s))=k^{\max\{(i', j'), i'+j'-n\}-n}$, 经检验,$i=j$ 时该式也成立。

枚举 $(i', j')$ 和 $i'+j'$, 容斥求和。

posted @ 2019-08-21 17:15  nealchen  阅读(307)  评论(0编辑  收藏  举报