[Codeforces is All You Need]CR 827 G (1742G) - Solution
讓我感覺有點意思的總想寫一個題解。

問題簡述
????????給定一個序列,請將其重新排列,使得前綴按位或得到的序列
字典序最大,其中
。
????????題目鏈接:https://codeforces.com/contest/1742/problem/G
思路
????????由于最后得到的序列長度恒定為,因此字典序最小只需令
靠前的項盡可能大,換言之,可以直接構(gòu)造解
:
????????(注:因為任意解均可,當有多個結(jié)果相同時,取最小下標。)我們可以直接如此構(gòu)造,得到一個復雜度為的算法。但實際上沒有必要:一個int型(哪怕不帶符號)數(shù)至多32位,因此一種樸素的感覺是,
序列會很快(
項之內(nèi))變成常列,于是此后
的排序?qū)⒉辉儆绊?img type="latex" class="latex" src="http://api.bilibili.com/x/web-frontend/mathjax/tex?formula=b" alt="b">的字典序大小。這一樸素的感覺很容易得到證明。
? ? ? ? 假設(shè)對某一個,有
,這意味著對任意
,有:
????????如果我們將整數(shù)看作集合,上式意味著對任意,有
。而注意到
的通項按集合為
,因此有:
????????根據(jù)上式不難發(fā)現(xiàn),序列將變?yōu)槌A?,?img type="latex" class="latex" src="http://api.bilibili.com/x/web-frontend/mathjax/tex?formula=b_%7Bi-1%7D%5E%7B%5Cpi%7D%20%3D%20b_%7Bi%7D%5E%7B%5Cpi%7D%20%20%3D%20..." alt="b_%7Bi-1%7D%5E%7B%5Cpi%7D%20%3D%20b_%7Bi%7D%5E%7B%5Cpi%7D%20%20%3D%20...">。而如果,則至少集合中多出
個元素,而全集僅包含
個元素,因此實際上只需要計算
的前
項即可,時間復雜度為
。
后記
????????本場的實況錄制地址:https://www.bilibili.com/video/BV1f84y1B7td
????????當然,我也不知道為什么我臨場寫了個那么復雜的玩意兒……看來還需要繼續(xù)努力。
