Solution Set -「LOCAL」衝刺省選 Round XXVII
\(\mathscr{Summary}\)
還行,B 題挺不錯,C 題就省選來說有點水(?
\(\mathscr{Solution}\)
\(\mathscr{A-}\) 分裂
初始時,你有一個 \(1\) 級球,每次可以把一個 \(k\) 級球變成 \(k+1\) 個 \(k+1\) 級球,請構造恰好得到 \(n\) 個球的方案,僅需輸出最終球的等級和對應數量。
多測,\(T\le10^4\),\(n\le10^{18}\),你需要保證所有方案中球的等級種類之和不超過 \(10^7\)。
一開始去優化“球的數量之和”,大大地偽了一發。
注意部分分有個 \(n\) 是階乘,而階乘的時候等級種類自然是最少的,所以我們先找到最大的 \(x!\le n\)
階乘的是指數級,那麼複雜度為 \(\mathcal O(T\log n)\),每次使用不超過 \(4\) 種等級。
\(\mathscr{B}-\) 未來
給定長度為 \(n\),字符集為 \(\{\text r,\text g,\text b\}\) 的字串 \(S\)
\(n\le5\times10^5\)。
套路性地去想一個具有交換律、結合律的整數運算來等價表示兩個字元的運算結果。進而,令三種字元為 \(0,1,2\),可以構造出這樣的運算:\(a\oplus b=(-(a+b))\bmod 3\),並且這個負號僅由 \(m\) 決定,問題被轉化成:給定序列 \(\{a_n\}\)
若 \(a_i\) 的值在下標移動 \(d\) 次後更新到了 \(a_j\),那麼貢獻係數顯然是 \(\binom{m}d\),注意僅對 \(3\) 取模,所以對它 Lucas 一發,設 \(m=\sum 3^{m_k}\) 為 \(m\) 的三進位制分解(如果某個冪次數是 \(2\),加兩次),就組合意義上,我們可以依次對 \(\{a_n\}\) 施加 \(3^{m_1}\) 次操作,再施加 \(3^{m_2}\) 次操作,……最後總共施加 \(m\) 次操作。每次操作中,貢獻係數都是 \(\binom{3^{m_i}}{d}\),因而 \(d=0\) 或 \(d=3^{m_i}\) 時,才能使係數非 \(0\),這個可以 \(\mathcal O(n)\) 模擬一遍算出來,所以總複雜度 \(\mathcal O(n\log m)\)。
\(\mathscr{C}-\) 回憶
給定一個 \(n\times m\) 的網格,\((i,j)\) 以 \(a_{i,j}\) 的概率可用,求可用單元格構成的四聯通塊中,最大塊大小的期望。
\(nm\le40\)。
你能想到最暴力的插頭 DP:按列轉移,狀態陣列直接 map<pair<vector<int>, vector<int> >, int>
,過了。打了下表,有效狀態數不超過 \(10^5\)。