【省选模拟】20/06/17

ProblemProblem

  • AA:容易发现是对向左最大深度不超过 m2m-2 的二叉树进行计数
    写出 dpdp 式子是
    dpi,j=k=1i1dpk,j1dpik,jdp_{i,j}=\sum_{k=1}^{i-1}dp_{k,j-1}dp_{i-k,j}
    写成生成函数即为
    Fj(x)=Fj(x)Fj1(x)+xFj(x)=x1Fj1(x)F_j(x)=F_j(x)F_{j-1}(x)+x\\ F_j(x)=\frac{x}{1-F_{j-1}(x)}
    F(x)F(x) 可以写成 A(x)B(x)\frac{A(x)}{B(x)} 的形式且上下次数不超过 nn,于是可以代点值 O(nlogn)O(n\log n)
    可以得到 O(n2)O(n^2) 的分数
    考虑一棵二叉树对应唯一一条格路,对树中序遍历,走左儿子就向右,走右儿子就向上
    对不经过 y=x+1,y=xm+1y=x+1,y=x-m+1 的格路计数
    考虑最终的路径若经过第一条就写下一个 aa,若经过第二条就写下一个 bb,最后的序列形如 abababababab,显然有 (1)cnt(-1)^{cnt} 的系数,枚举经过几次可以简单计算方案数,CodeCode

  • BB:直接最短路 O(n32k)O(n^32^k) 可以得到 5252 分的好成绩
    考虑若存在一条路径不经过结界可以到达,那么我们去拿水晶当且仅当走结界可以更近
    枚举这个水晶以及最后走的结界,将这些点作为关键点,考虑求出关键点间的最短路
    处理出 fi,j,Sf_{i,j,S} 表示关键点 iijj 集合为 SS 的方案数,发现可以跑 floyedfloyed,用集合 SS 中的来增广,复杂度 O(k32k)O(k^32^k),需要预处理两点间不经过任何一个结界的最短路 O(n3)O(n^3),然后 O(n2k2)O(n^2k^2) 预处理答案,CodeCode

  • CC:考虑如何判断合法性,选择两个一样的消掉,记串 SS 消了过后成为 f(S)f(S)
    分治,枚举左边的一个 aa 和右边的一个 bb 交换,考虑计算 f(f(1...i)+b+f(i+1...mid))f(f(1...i)+b+f(i+1...mid))
    hashhash 求消掉的最长串可以做的 O(logn)O(\log n) 拼接,最后考虑拼接左右的 f(f(1...mid)+f(mid+1...n))f(f(1...mid)+f(mid+1...n))CodeCode

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章