2020.11.25提高组模拟 总结

2020.11.25【NOIP提高A组】模拟

又是成功爆炸的一场模拟赛......

T1. 6891 太空漫步(walking)

第一眼构造自动机,设 \(f[i][j]\) 表示匹配串到 \(i\),自动机到 \(j\) 是否可行,\(O(10^8)\) 转移即可。

但是感觉 \(1e8\) 过不了于是想了好久,结果最后告诉我甚至不用构造自动机,第二维设成模式串到 \(j\) 就可以了emmm

T2. 6892 树的解构(deconstruct)

考虑删除每一条边对答案的贡献,发现贡献分成了四部分难以统计,于是我赛时就炸了......

其实正解也不难,考虑每个点对答案的贡献,点 \(u\) 能在祖先 \(f\) 删边时产生 \(1\) 的贡献当且仅当 \((f, u)\) 之间的所有边中,\(f\)\(u\) 的边是最早被删除的,也就是说对于 \(f\)\(u\) 产生 \(1\) 的贡献的概率为 \(\frac{1}{dep_u - dep_f}\)

那么 \(u\) 对答案期望的贡献为 :\(\sum \limits_{d = 1}^{dep_u - 1}{\frac{1}{d}}\)

最后答案即为:

\[\sum_{i = 1}^{n}{\sum_{d = 1}^{dep_i - 1}{\frac{1}{d}}} \]

前缀和 \(O(n)\) 可以求出答案。(默认 \(dep_1 = 1\)

T3. 6893 小 T 与灵石(stone)

比赛的时候没有什么想法,听说有人给剖了......

正解也比较巧妙,易证,\(dist(x, p_j)\) 取得最大值时 \(p_j\) 一定为 \(p\) 组成树的直径的端点。

那么找出直径后,在新建节点链接直径的中点,边权为直径的一半,为避免小数可把边权 \(\times 2\),如果中点在边上,则新建两个节点分别连接边的两个端点,边权为直径的一半 \(+ 1\)

这样建出新图后,\(g(x)\) 即为 \(x\) 到最近的新建点的距离。

\(T4\)

暂时不会唔

posted @ 2020-11-26 16:50  buzzhou  阅读(31)  评论(0编辑  收藏  举报