【省選模擬】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

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