2020中國大學生程序設計競賽(CCPC)-網絡選拔賽 題解


1001

1002

題意:給定一個n個點的完全圖,邊權為lcm(i+1,j+1),求最小生成樹。

考慮這樣一個構造方法

所有數字都向自身的最小質因數連邊

這樣可以保證每個數字的貢獻都是其本身,達到了理論最小。(lcm一定比自己本身要大)

然后就有了k棵以質數為根的樹

然后考慮連接這k棵樹

顯然質數之間的lcm就是它們的乘積

所以所有根都和2連邊即可

考慮計算答案

\(tot\)為2到n+1的所有素數的和

\[\begin{align*} ans&=2*(tot-2)-tot+\sum_{i=2}^{n+1} i \\ &=tot - 4+\sum_{i=2}^{n+1} i \\ &=tot+\frac{n^2+3n-8}{2} \\ \end{align*} \]

考慮如何計算tot

這是一個min25模板題,不再贅述

實際上,也可以通過分塊打表的方法通過此題。

1003

簽到題

顯然最后一個用距離出口最近的即可。

1007

題意:給出一個字符串,將其重新排列,使得該字符串的border最大

比較顯然的構造是出現次數最多的字母全部放在開頭,然后border就是該字母出現的次數

由border的簡單性質可知答案不可能比這個大,因此具有正確性

1010

簽到題

按照題意模擬即可

1013

題意:給定一個多項式,操作n-1次。第k次操作為令\(f(x)=B_k*f'(x)+C_k*f(x)\)。求操作n-1次后的多項式。

考慮算貢獻

顯然原多項式的高次項會對最終答案的低次項產生貢獻

考慮怎么算xk對xi的貢獻

首先貢獻系數的話

如果\(bk=ck=1\)的話顯然就是一個NE-Latice-Path問題

貢獻系數也就是一個組合數

既然有了系數

那么只需要模擬NE-Latice-Path的計算過程

設一個生成函數#h_k(x)=B_k*x+C_k

把這n-1個單項式乘起來即可得到關於貢獻系數的多項式

這一步需要通過類似線段樹分治的分治NTT實現

這里一定要注意寫的常數小一些

不要采取封裝多項式的寫法

這里我采用了類似

除此之外還要考慮求導本身產生的系數

簡單推導發現\(x^k\)\(x^i\)產生的貢獻是\(\frac{k!}{i!}\)

整理一下

設:

最終多項式的系數為\(f_k\)

求導k次的貢獻系數為\(g_k\)

\[\begin{align*} f_i&=\sum_{k=i}^n g_{k-i}*a_k*\frac{k!}{i!} \\ f_i*i!&=\sum_{k=i}^n g_{k-i}*a_k*k! \\ \end{align*} \]

發現這是一個下標差為定值的的卷積

是一個經典套路題

翻轉數組后即可轉化為正常形式的卷積

大力NTT即可

總復雜度\(O(nlog^2n)\)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM