題目鏈結
如果按照暴力的方法,進行兩次迴圈可以解決:
for i in
range
(n):
for j in
range
(i+1
, n)
: ans =
max(ans,nums[i]
^nums[j]
)
這樣操作的時間複雜度為o(n
)o(n)
o(n)
還可以轉化為二進位制的問題,進而用trie樹解決。我們從最高位開始進行選擇,盡量選擇與目前這個數不同的位,這樣可以保證異或最大。
class
trie
:def
__init__
(self)
: self.dic =
defadd
(self, x)
: dic = self.dic
i =30while i >=0:
cur =
(x>>i)&1
if cur not
in dic:
dic[cur]
= dic = dic[cur]
i -=
1def
query
(self, x)
: dic = self.dic
i =30 ans =
0while i >=0:
cur =
(x>>i)&1
if1-cur in dic:
dic = dic[
1-cur]
#ans = ans * 2 + 1-cur
ans +=
1<
else
:#ans = ans * 2 + cur
dic = dic[cur]
i -=
1return ans
n =int
(input()
)good =
list
(map
(int
,input()
.split())
)tree = trie(
)max_ =
0for i in
range
(n):
tree.add(good[i]
)# 先插入,可以避免判斷空樹
ans = tree.query(good[i]
) max_ =
max(max_, ans)
print
(max_)
二進位制 位與 或 使用
平時開發是狀態判斷比較麻煩,有時資料庫可能會設定多個欄位或乙個字段多個值來滿足要求。管理維護太繁瑣,最近專案中需要判斷業務流程執行狀態,我們就用二進位制位 8位 來設定流程的狀態。當然上述所說與標題裡的位與 或 沒多大關係,接下來慢慢分析二進位制位與 或 如何使用者許可權管理。假如 1 許可權1 2...
t070 二進位制
time limit 1 second memory limit 128 mb 問題描述 求所有可以只用1和00拼成的長度為n的二進位制數的個數除以15746的餘數。比如當n 4的時候,有5個可能的二進位制數 0011,0000,1001,1100,1111。資料範圍 1 n 1000000 輸入格...
題目1473 二進位制數
時間限制 1 秒 記憶體限制 128 兆 特殊判題 否 提交 10519 解決 3030 題目描述 大家都知道,資料在計算機裡中儲存是以二進位制的形式儲存的。有一天,小明學了c語言之後,他想知道乙個型別為unsigned int 型別的數字,儲存在計算機中的二進位制串是什麼樣子的。你能幫幫小明嗎?並...