T1 擠壓
機率期望,二進位制拆位
看到異或想到拆位算貢獻
後面一部分直接簡單 \(DP\) 計算即可
時間複雜度瓶頸在 \(DP\) ,為 \(O(nlog^2n)\)
T2 工地難題
計數題,排列組合,容斥
發現最大恰好這一限制不好滿足,考慮對答案做個字首和,即計算最大不超過這一限制。
問題轉移到計算最大不超過的方案
考慮到 \(0\) 的個數是固定的為 \(n-m\) 個,它把 \(1\) 分成了 \(n-m+1\) 個連續段(可能長度為 \(0\) )。
記限制最大不超過的值為 \(k\) ,\(1\) 的個數為 \(n\),連續段的個數為 \(m\)。
當拋棄限制 \(k\) 的時候答案顯然為 \(\dbinom{n+m-1}{m-1}\)
思考怎麼處理限制 \(k\),發現拋棄限制 \(k\) 時算出的答案就是連續段的長度超過 \(k\) 至少有 \(0\) 個的個數,即等於 \(\sum_{i=0} cnt_{連續段長度超過\ k\ 恰好為 i 的個數}\) 如果能算出連續段的長度超過 \(k\) 至少有 \(1\) 個的個數,直接作差就算完了,但發現這個東西同樣不好求。
我們可以欽定出多少個大於 \(k\) 的個數 \(i\),即從總數 \(n\) 中取出 \(i(k+1)\) 個來,再從剩下的 \(n-i(k+1)\) 箇中做拋棄限制 \(k\) 的計算,再在其基礎上塞入這 \(i\) 個長為 \((k+1)\) 的連續段即乘上 \(\dbinom{m}{i}\),但是這樣計算會算重,舉個例子在計算長度超過 \(k\) 至少有 \(1\) 個的個數時它會將 \(cnt_{連續段長度超過\ k\ 恰好為 2 的個數}\) 多算一遍,即會在這兩個連續段中都插入一次。
考慮容斥去重,下表中至少的個數是以上述方案計算的,其中第 \(i\) 行 \(j\) 列是以至少有 \(0\) 箇中恰有 \(i\) 個超過的個數為單位 \(1\) 所算的係數。
恰有 \(i\) 個超過\ 至少有 \(i\) 個超過 | \(0\) | \(1\) | \(2\) | \(3\) | \(4\) | ... |
---|---|---|---|---|---|---|
\(1\) | \(\binom{1}{0}\) | \(\binom{1}{1}\) | \(0\) | \(0\) | \(0\) | |
\(2\) | \(\binom{2}{0}\) | \(\binom{2}{1}\) | \(\binom{2}{2}\) | \(0\) | \(0\) | |
\(3\) | \(\binom{3}{0}\) | \(\binom{3}{1}\) | \(\binom{3}{2}\) | \(\binom{3}{3}\) | \(0\) | |
\(4\) | \(\binom{4}{0}\) | \(\binom{4}{1}\) | \(\binom{4}{2}\) | \(\binom{4}{3}\) | \(\binom{4}{4}\) | |
... |
目的是為了清除上表中所有的個數,由 \(\sum_{i=0}^{n}(-1)^i\dbinom{n}{i}=0\) 注意到上表每行滿足這樣一個式子,直接做即可。
時間複雜度分析,對於給定 \(k\) ,最多能有 \(\dfrac{n}{k}\) 個連續段的長度超過 \(k\),所以時間複雜度是調和級數為 \(O(nlogn)\)。
T3 星空遺蹟
特殊性質,棧,線段樹
性質1:對於連續一段操作其實本質有用的只有一個
性質2:若一段操作兩邊的操作都能贏它,則可將這一段變為兩邊的操作
證明可以考慮操作 \(f\) 本質上是獲勝者蔓延的過程
考慮詢問,可以用一個單調棧去維護這樣的性質,即從棧頂的第 \(i+1\) 個操作贏第 \(i\) 個操作,每次對於一個新的操作入棧時,如果相同則 \(pop\) 棧頂將自己放入,如果贏了棧頂則 \(pop\) 兩次棧頂將自己放入,如果輸給了棧頂則直接放入。這樣是滿足以上的性質,則最後的答案就是棧底元素,這樣就得到了查詢 \(O(n)\) 的做法。
發現不用真的去維護這樣一個棧,只需要記錄棧的 \(size\) 即可,記 \(f\) 為棧的 \(size\) 則得到式子
答案即為最後一個 \(f=1\) 時的棧中的元素,但情況 \(3\) 中對 \(1\) 取 \(\max\) 並不好維護,發現不對 \(1\) 取 \(\max\) 直接減到負的答案是最後一個 \(f\) 最小時的操作,但其實任意一個最小都是相同的,證明考慮 \(f\) 本質上是一個字首和的形式
簡單轉化,用線段樹維護即可
時間複雜度 \(O(nlogn)\)
T4 紐帶
析合樹
不會