1. 程式人生 > 其它 >Solution Set -「LOCAL」衝刺省選 Round XXVII

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\)

,先把 \(1\) 級球不停操作得到 \(x!\)\(x\) 級球,此時再取一定數量的 \(x\) 級球操作到 \(x+1\) 級球,設 \(n'\) 為還需要的球的數量,那麼 \(n'\le x\)。通過升級一個 \(k\) 級球,還原 \(k\)\(k\) 級球,可以使 \(n'\) 減少 \(1\),模擬幾次就行。

  階乘的是指數級,那麼複雜度為 \(\mathcal O(T\log n)\),每次使用不超過 \(4\) 種等級。

\(\mathscr{B}-\) 未來

  給定長度為 \(n\),字符集為 \(\{\text r,\text g,\text b\}\) 的字串 \(S\)

,對其進行 \(m\) 次變換,每次變換使 \(S\) 變為 \(S'\),若 \(S_i=S_{(i+1)\bmod n}\)\(S'_i=S_i\),否則 \(S'_i=\{\text r,\text g,\text b\}\setminus\{S_i,S_{(i+1)\bmod n}\}\)。求變換後的最終序列。

  \(n\le5\times10^5\)


  套路性地去想一個具有交換律、結合律的整數運算來等價表示兩個字元的運算結果。進而,令三種字元為 \(0,1,2\),可以構造出這樣的運算:\(a\oplus b=(-(a+b))\bmod 3\),並且這個負號僅由 \(m\) 決定,問題被轉化成:給定序列 \(\{a_n\}\)

,每次操作令 \(a'_i=a_i+a_{(i+1)\bmod n}\),求 \(m\) 次操作後每個 \(a_i\bmod 3\)

  若 \(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\)