-
A A A:容易发现是对向左最大深度不超过 m − 2 m-2 m−2 的二叉树进行计数
写出 d p dp dp 式子是
d p i , j = ∑ k = 1 i − 1 d p k , j − 1 d p i − k , j dp_{i,j}=\sum_{k=1}^{i-1}dp_{k,j-1}dp_{i-k,j} dpi,j=k=1∑i−1dpk,j−1dpi−k,j
写成生成函数即为
F j ( x ) = F j ( x ) F j − 1 ( x ) + x F j ( x ) = x 1 − F j − 1 ( x ) F_j(x)=F_j(x)F_{j-1}(x)+x\\ F_j(x)=\frac{x}{1-F_{j-1}(x)} Fj(x)=Fj(x)Fj−1(x)+xFj(x)=1−Fj−1(x)x
F ( x ) F(x) F(x) 可以写成 A ( x ) B ( x ) \frac{A(x)}{B(x)} B(x)A(x) 的形式且上下次数不超过 n n n,于是可以代点值 O ( n log n ) O(n\log n) O(nlogn)
可以得到 O ( n 2 ) O(n^2) O(n2) 的分数
考虑一棵二叉树对应唯一一条格路,对树中序遍历,走左儿子就向右,走右儿子就向上
对不经过 y = x + 1 , y = x − m + 1 y=x+1,y=x-m+1 y=x+1,y=x−m+1 的格路计数
考虑最终的路径若经过第一条就写下一个 a a a,若经过第二条就写下一个 b b b,最后的序列形如 a b a b a b ababab ababab,显然有 ( − 1 ) c n t (-1)^{cnt} (−1)cnt 的系数,枚举经过几次可以简单计算方案数, C o d e Code Code -
B B B:直接最短路 O ( n 3 2 k ) O(n^32^k) O(n32k) 可以得到 52 52 52 分的好成绩
考虑若存在一条路径不经过结界可以到达,那么我们去拿水晶当且仅当走结界可以更近
枚举这个水晶以及最后走的结界,将这些点作为关键点,考虑求出关键点间的最短路
处理出 f i , j , S f_{i,j,S} fi,j,S 表示关键点 i i i 到 j j j 集合为 S S S 的方案数,发现可以跑 f l o y e d floyed floyed,用集合 S S S 中的来增广,复杂度 O ( k 3 2 k ) O(k^32^k) O(k32k),需要预处理两点间不经过任何一个结界的最短路 O ( n 3 ) O(n^3) O(n3),然后 O ( n 2 k 2 ) O(n^2k^2) O(n2k2) 预处理答案, C o d e Code Code -
C C C:考虑如何判断合法性,选择两个一样的消掉,记串 S S S 消了过后成为 f ( S ) f(S) f(S)
分治,枚举左边的一个 a a a 和右边的一个 b b b 交换,考虑计算 f ( f ( 1... i ) + b + f ( i + 1... m i d ) ) f(f(1...i)+b+f(i+1...mid)) f(f(1...i)+b+f(i+1...mid))
用 h a s h hash hash 求消掉的最长串可以做的 O ( log n ) O(\log n) O(logn) 拼接,最后考虑拼接左右的 f ( f ( 1... m i d ) + f ( m i d + 1... n ) ) f(f(1...mid)+f(mid+1...n)) f(f(1...mid)+f(mid+1...n)), C o d e Code Code
【省选模拟】20/06/17
最新推荐文章于 2022-10-21 17:09:43 发布