【省选模拟】20/06/17

P r o b l e m Problem Problem

  • A A A:容易发现是对向左最大深度不超过 m − 2 m-2 m2 的二叉树进行计数
    写出 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=1i1dpk,j1dpik,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)Fj1(x)+xFj(x)=1Fj1(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=xm+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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FSYo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值