20200724T3 【NOIP2015模擬10.28B組】終章-劍之魂
Description
【背景介紹】
古堡,暗鴉,斜陽,和深淵……
等了三年,我獨自一人,終於來到了這裡……
“終焉的試煉嗎?就在這裡嗎?”我自言自語道。
“終焉的試煉啊!就在這裡啊!”我再一次自言自語道。
“這背後可能有那個東西嗎?”我自言自語道。
“這背後一定有那個東西呢!”我又一次自言自語道。
我沉默著,踏上黑漆漆的索橋,小心翼翼地,拿出鋒利的注入我靈魂的雙劍……
“那麼,我們開始吧……”我最後一次自言自語道。
【題目描述】
Mysoulofmysowrd!
終焉的試煉即將到來,作為一名有修養的劍士,雖然沒有習得n刀流但是二刀流還是沒問題的。然而我也是個劍的收藏者,家裡屯著n把劍,每一把劍都有一個靈魂值a[i],由於一些劍之間可能有共鳴,所以我需要兩把契合度最高的劍。據劍聖所說,兩把編號為i,j劍的契合度為a[i]anda[j]。如何深得劍的靈魂呢?
注:AND為按位與運算,先將數轉成二進位制,不滿位數的補全0,然後成為兩個長度相同的二進位制數,處理的時候,兩個相應的二進位制位都為1,該位的結果值才為1,否則為0。例下圖。
Input
第一行一個整數n,代表藏劍數。
第二行n個整數,第i個整數表示a[i]。
Output
輸出包含一個正整數,最好的兩把劍的契合度。
Sample Input
5
125631
Sample Output
4
【樣例解釋】
5and6=4或者12and5=4或者12and6=4
Data Constraint
對於40%的資料n≤1,000
對於100%的資料n≤1,000,000,0≤a[i]<2^31
solution
對於40%的資料
時間複雜度:
直接暴力兩兩判斷
對於100%的資料
1.先sort然後前後兩兩判斷
時間複雜度:
顯然錯誤,但是資料太水了。。。
2.暴力基礎上用ans優化
還是資料太水了。。。
正解
先考慮答案的性質:
Ans=a1*2^0+a2*2^1+a3*2^a3+…….+an*2^(n-1);
可見,答案中嗎,高位的數選肯定比不選優。
那我們就考慮答案的倒數第i位是否可以選。
設當前Ans為比第i位高的所有二進位制位選擇的最優情況的和,那麼如果第i位能選,就必定在這n個數中至少有兩個數滿足:
1:當前答案中的所有二進位制為1的位置,在相應的這個數中的位置也為1(即ans and a=ans);
2:這個數的二進位制第i位為1(即aand (2^(i-1)=(2^(i-1)))。
所以,我們只需從高位向低位掃一遍就可以了。
時間:O(30*n)
空間:n