FJOI2021 簡要題解


D1T1 加法方程

因為字母和數字是一一對應的,所以只要不同字母數多於 \(10\),方程一定無解,則一遍暴力地枚舉答案的花銷是 \(O(10!)\)

我們發現,對於不同的答案串,它們的本質可能是相同的。

我們對相加的兩個串枚舉,得到的本質不同的串最多只有 \(10!\) 個,這很少。

那我們只要預處理出所有本質不同的答案串,再到哈希表內查詢即可。

D1T2 女生散步

簡單題,容易發現並證明答案就是最大的 \(x\) 滿足:\(\displaystyle\left\lfloor \frac{x+1}{2} \right\rfloor\left\lfloor \frac{x+4}{2} \right\rfloor<n\)

只要二分就可以輕松計算。

D1T3 最佳收益

這題有一個重要性質:\(a,b\) 中選擇的連續段至少其中一個連續段 \(≥\) 其所在序列權值之和的一半。

因為如果不這樣的話,直接全選某一個序列肯定更優。

假設我們欽定 \(a\) 選定的權值和超過一半,那第一個滿足前綴 \(>\) 權值之和一半的位置 \(pos\) 是必定要選的。

假設我們知道 \(b\) 選了什么,貪心地想:從 \(pos\) 往兩邊盡量延伸一定是最優解。

\(f(l,r)\)\(b\) 序列選 \([l,r]\) 時的值,則有 \(f(l,r)=sumb[r]-sumb[l-1]+a\) 序列選取位置的權值和。(其中 \(sumb\) 表示 \(b\) 序列前綴和)

考慮枚舉右端點,固定下 \(sumb[r]\),看看它會對那些左端點的權值產生影響,這實際上就是一個單調棧的過程,線段樹維護即可。

復雜度 \(O(nlogn)\),常數較大,卡時才能過。

D2T1 遺傳密碼

一個很顯然的暴力是把所有模式串正着插進一棵 \(Trie\),反着插進另一棵,每次轉移先被動轉移在主動轉移。

如果串長比較大,直接在 \(Trie\) 樹上暴力跳復雜度肯定爆炸,如果我們知道它可以(被)轉移到的位置就可以用線段樹優化。

這實際上就是一個求模式串與自己前綴的最長公共后綴、與自己后綴的最長公共前綴。

我們可以用 \(exkmp\) 求出。

那就很好做了,考慮根號分治,串長較小的用第一種做法,較大的用第二種做法。

時間復雜度 \(O(n\sqrt{nlogn})\)

D2T2 天文奇觀

不會,咕了。

D2T3 外星飛碟

看到題乍一看不會做(實際也不會做

考慮打個表找個規律,發現答案就是 \(n!-2n-1\)

\(n\leq 10^{10}\) 直接暴力求似乎不好做,模數不固定,而且不是素數,沒有太好的辦法,怎么辦呢…………

那就直接寫 \(O(n)\) 的暴力,然后你就過了,這就是 \(FJOI\)


免責聲明!

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



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