1. 程式人生 > 實用技巧 >20200724T3 【NOIP2015模擬10.28B組】終章-劍之魂

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

code