「loj - 2850」「ROI 2018 Day 2」無進位加法


link。

以前以為自己會證時間復雜度,后來考到原題發現自己證偽了,草。


從高到低確定 \(\sum b\) 的每一位是否可以為 \(0\)

枚舉第 \(p\) 位是否可以為 \(0\) 時,比第 \(p\) 位低的位全部填 \(1\),比第 \(p\) 位高的保留不變,得到一個 \(\sum b\)。之后看是否存在一個 \(\{b_i\}\) 滿足要求。

相當於我們需要把 \(\sum b\) 的每個 \(1\) 分配給某個 \(i\)(也即,\(b_i\) 的這一位為 \(1\)),使得 \(a_i\leq b_i\)

簡單的觀察:不妨設 \(a_1\geq a_2 \geq \dots \geq a_n\),則存在一個最優解滿足 \(b_1 \geq b_2 \geq \dots \geq b_n\)

由觀察,考慮 \(\sum b\) 最高位的 \(1\),它一定分配給最大的 \(a_{max}\)

如果 \(\sum b\) 的最高位 \(h\) 大於 \(a_{max}\) 的最高位 \(q\),則 \(a_{max}\) 接下來不需要被分配其他的 \(1\),直接刪掉。

如果 \(\sum b\) 的最高位 \(h\) 等於 \(a_{max}\) 的最高位 \(q\),則需要把 \(a_{max}\) 刪去最高位后再塞回去(如果刪掉最高位后非零的話)。

如果 \(\sum b\) 的最高位 \(h\) 小於 \(a_{max}\) 的最高位 \(q\),則不合法,此時 \(\sum b\) 的第 \(p\) 位填 \(0\)

當然,如果把所有 \(a\) 都刪完了,則 \(\sum b\) 的第 \(p\) 位填 \(1\)

顯然,這一過程不需要每次都從最高位開始掃 \(\sum b\),比 \(p\) 高的位的影響保留下來,可以從第 \(p - 1\) 位開始往后掃。


某時刻的某個 \(a\) 一定是初始時的某個 \(a_i\) 刪去最高的若干個 \(1\) 的情況,因此在過程中 \(a\) 的可能情況只有 \(O(\sum L)\) 種。

可以將這 \(O(\sum L)\) 種可能的 \(a\) 拿出來排序,具體來說由於只有長度相同的需要排,做個基數排序即可(當然,由於這部分不是瓶頸,你也可以嘗試一些 \(O((\sum L)\log(\sum L))\) 的排法)。


考慮某一時刻枚舉到 \(\sum b\) 的第 \(p\) 位。

設此時 \(a_1\geq a_2 \geq \dots \geq a_n\),並設 \(a_i\) 的最高位為 \(t_i\)。則合法的一個必要條件\(\forall i,p - i\geq t_i\)

分配給 \(a_i\)\(1\) 最大也只能是 \(p - i\),還有可能因為前面的數需要刪去最高位重新塞回來而變小。

另一方面,合法的一個充分條件\(\forall i, p - i > t_i\)

此時所有數都可以直接被刪掉。

那么事實上需要檢驗的只有 \(p = \max\{i + t_i\}\) 的情況。


我們找到使得 \(i + t_i\) 最大的 \(i\) 中最小的 \(k = \min\{i\}\)

如果 \(p = \max\{i + t_i\}\)\(0\),則 \(a_1\sim a_k\) 分別對應了 \(\sum b\) 的第 \(p - 1 \sim p - k\) 位上有 \(1\)

刪掉 \(a_1\sim a_k\),插入 \(a_k\) 刪去最高位后的 \(a'_k\),然后繼續找 \(p' = \max\{i + t_i\}\)

如果 \(p - k > p'\),則前面的合法。

如果 \(p - k < p'\),則前面的不合法。

如果 \(p - k = p'\),我們令 \(p = p'\),令 \(k\) 為此時使得 \(i + t_i\) 最大的最小 \(i\),然后繼續遞歸檢驗。

可以使用線段樹維護查找最大值的過程。


然后可以證明,這樣遞歸的總次數不會超過 \(O(\sum L)\)。由於使用線段樹維護,總復雜度為 \(O(\sum L\log(\sum L))\)

首先,相同長度的 \(a_i\) 只會有一個最大的 \(i + t_i\)。也即,我們每次選定的 \(a_{k'}\) 比上次遞歸進來的 \(a_k\) 對應的長度要短。

因此,如果最開始需要檢驗的是 \(p\),則遞歸次數實際上不會超過 \(O(L_p)\)

而對於每個串,它只有一次是“最開始”檢驗的。因此得證。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM