衝刺CSP聯訓模擬2

Abnormal123發表於2024-10-06

衝刺CSP聯訓模擬2

A. 擠壓

考慮把一個數寫成二進位制,不妨記為 $ \sum s_i \times 2^i,s=0或1 $ ,設其機率為 $ p_k $ ,則期望值:

\[p_k \times (\sum_{ i=0 }^{ 29 } s_i)^2 = p_k \times \sum_{i=0}^{29} \sum _{j=0}^{29} s^i \times s^j \times 2^{i+j} \]

設 $ dp[i][j] $ 為異或後i,j位均為1的機率,方程不難推。

避坑:不要嘗試計算每一位異或後是1的機率,因為某些位數會有衝突的機率。

B. 工地難題

發現對於每個 $ k $ ,都需要單獨考慮,這樣複雜度已經達到 $ O(n) $ ,這個時候跑DP似乎只能度過相對失敗的一生。以下我們來推數學式子。

一個簡單的想法是,先計算最長連續段不超過 $ k $ ,再差分。但是這樣還是不好做,發現如果沒有 $ k $ 的限制,有 $ n-m $ 個0把 $ m $ 個1分開,相當於 $ \sum _{i=1}^{n-m+1} x_i = m (x_i \ge 0) $ 方案數為 $ \binom{n}{n-m} $ ,減去最長段超過 $ k $ 的就是答案。假設有一個段超過 $ k $ ,那麼長度至少 $ k+1 $ ,其他1還是可以隨意分佈,這個最長段的位置有 $ n-m+1 $ 個,方案數為 $ (n-m+1) \times \binom{n-(k+1)}{n-m} $ 。

由於這有重複的情況在內,即至少有一個段超過 $ k $ 包含至少有兩個段超過 $ k $ ,容斥即可。注意到如果有超過 $ \left \lfloor \frac{m}{k+1} \right \rfloor $ 個段超過 $ k $ ,方案數一定為0。因此複雜度是調和級數的, $ O(n\log n) $ 。

C. 星空遺蹟

$ O(NQ) $ 的做法比較好想,就是用一個棧把無意義的元素彈掉。

定義

\[f(n) = \begin{cases} f(n-1)+1 , & if (s[n]<s[n-1]) \\ f(n-1) , & if (s[n]=s[n-1]) \\ f(n-1)-1, & if (s[n]>s[n-1]) \end{cases} \]

發現一段字串的答案為 $ s[n] $ ,當且僅當 $ f(n) $ 是這一段最後一個非正數。線段樹維護字首和最大值,區間修改,區間查詢。

想法

這一場唐完了,T1每一位分開考慮,甚至用一個折半搜尋,除錯,手模,暴力都不能過樣例,2.5h之後發現問題(上文說過了),然後開始思考人生。寫了T1指數級暴力,還有1h開T2,因為想DP度過相對失敗的一生,複雜度假了2次,果斷改指數級暴力,於是前兩題喜提 $ 40pts $ ,T3 $ O(n^2) $ 暴力顯然,獲得 $ 60pts $ ,T4看起來是難題,也沒想暴力,回到T1思考人生(除了T3都失敗了)。

相關文章