1. 程式人生 > >紀中國慶集訓 簡要題解

紀中國慶集訓 簡要題解

QaQ主要是因為題目太難寫不動blog一直在調程式……所以只好先口胡一波題解
A組10/5
T1:
題意 找k次連續的”23”,每次若”2”的位置為奇數則將其變為”22”,反之為”23”,求最後串變成了什麼
題解 我們會發現實際上只有兩種迴圈節”223”和”233”,且要求開頭再奇數位,其他的消掉之後不會再產生太多……於是只要不斷維護下一個就好了 可以用一個指標直接維護,看情況前移後移,可以發現還是線性的。也可以維護一個連結串列維護下有序序列,不過太麻煩了?
T3:

A組10/6
T1:
題意 設f(i)表示不大於i的數中與i互質的數的平均數,求Ri=Lf(i)k 模某經典質數
題解 首先由於(

x,y)=1(x,xy)=1,那麼我們可以發現其實f(i)=i
於是這題就變成自然數冪和的裸題辣 有好多經典做法 某次CF的EduRound還出過一次E(好像是10左右吧)
由於我們可以證明自然數冪和是有k+1次的通項的,所以我們只要爆算到k+2的自然數冪和然後用拉格朗日插值就可以搞出這題了。本質上來說,就是高斯消元爆解,但是拉格朗日插值法無疑更加簡單。
既然是插值法,那就是構造下函式使得函式過k+2個點,那麼我們只要考慮對於x=i,讓除了包含當前應該有的yi外的項都來一個(xi)消掉,然後有yi的那一項只需要讓係數為1,然後考慮到其他xi的情況只需要除掉k+2j=1,ji(j
i)
就好了 然後顯然是對的。
我用的其實是斯特林數 懶得講辣
這題還可以用差分表搞出來 等我看完FuLan大爺的部落格再來填坑……

T3:
題意:先給出一些字串 然後動態加進去字串和查詢一些字串的公共字尾長度
題解:竟然沒看出有Trie的動態做法我是不是傻了……
(第一眼:離線把串拼在一起!SA!
過了一會:誒好像還能Hash?算了不管了
考試後:哇哇哇還能Trie動態做……)
先不考慮動態加串 倒著加字串然後丟Trie裡 亂跑LCA
然後再考慮加了串之後怎麼繼續維護LCA
我們發現給新加的點稍微維護下向上倍增的陣列就好了 於是幾乎不用加程式碼
當然離線之後樹剖和Tarjan都行(樹剖LCA程式碼好短啊)
順便%一發某個Splay維護DFS序列的Dalao?
A組 10/7
T1:
題意 給出一個DAG,開頭結尾外點數每層為k,可以將相鄰兩層之間的邊翻過來交換連線,問使得最終路徑條數為偶數的方案數 模某經典質數
題解 狀壓DP,因為只需考慮奇偶性,所以用01考慮k

10所以直接壓進去,另外記下當前搞的是從上往下第幾個,然後考慮對一個狀態把可產生的狀態先用二進位制打出來奇偶性,轉移的時候直接做,然後用lowbit優化下轉移(只轉移為1的),先翻過來和不翻的都做一遍就好了

T2:
題意 給出n+1個集合(n是偶數),每個集合有2n個數,用一種神奇的方式給出每個數的存在性(64進位制???),然後要求找到一對集合使得交大小不小於n2
(吐槽) 暴力出奇跡!暴力踩標程!(誤)@Snakes用標程給的方法130+ms然後暴力1ms!
我是用bitset硬上的因為比較好寫,然後現在還是最短程式碼 另外這題原本有一個”NO Solution”然而事實證明不存在這種情況(所以沒用?)
題解 反正暴力可過,我們就只來解釋下為何暴力可過吧 正解其實是隨機n對判斷……不過好像比較慢
我們先定義一個期望,為兩兩集合交大小的平均(就是隨機選兩個集合交的大小),同時還是按照二進位制我們設一個ci,表示第i位上有幾個是1,因為每個都是大小為n的子集,於是2ni=1ci=n(n+1)
然後我們發現對於其中第i位選的總數是C(n1,2)=O(n2),能夠恰好交起來方案數C(ci,2)=O(c2i),那麼這裡總的期望就是2ni=1C(ci,2)C(n1,2)=O(2ni=1c2in2)。由均值不等式中QnAn,即

2ni=1c2in2ni=1cin=O(n)
兩邊平方之後再除就可以得到那個期望就是O(n)的了(實際上,猜一下由對稱性都知道是等的時候取極值)
那麼在這裡期望就有O(n)個了,精確值應該是n12,如果平均值到n,那就顯然有滿足條件的。由上面的推理我們已經得出不會沒解了,所以這裡需要大一個常數,如果要補上這個常數需要至少O(n)個集合之間有n2規模的交,也就是說,這樣的對數不只有,還挺多的……
所以完全可以暴力做(暴力還挺快的)。
T3:
題意 在一棵樹上選最少的點使得每個選定的點能在經過k條邊後到達的所有點中選出一個大小為s的點集,使得所有點集的並集為整棵樹的點
題解 強行貪心一波 我們會發現我們應該儘可能用完這k的長度,因為可以涉及到的點是最多的 同時我們應該選儘量深的點 因為選其他的不會更劣
然後我們設F(x,k)表示x下面距離為k的多餘覆蓋點的個數(就是子樹裡面選定的點往上還可以延伸的點的個數),G(x,k)表示x