前幾天做了個trie樹的題,正好記一下。
首先先看乙個簡單題
acwing 143. 最大異或對
題目
在給定的n個整數a1,a2……an中選出兩個進行 xor(異或)運算,得到的結果最大是多少?
第一行輸入乙個整數n。
第二行輸入n個整數a1~an。
輸出乙個整數表示答案。
1 ≤n
≤105
,0≤a
i<23
11≤n≤10^5, 0≤a_i<2^31
1≤n≤10
5,0≤
ai<23
1 solution
這個題看資料範圍應該是o(nlogn)級別內的,先看暴力做法就是列舉ai和aj,這樣是o(n^2)的,妥妥的tle。然後看第一維ai肯定要保留,只有優化第二維aj了。
要求兩個數異或最大,肯定要越高位越大越好,根據這個貪心的思想,就可以套上trie了(生硬)。
這裡的son陣列:son[s][0/1]表示s層0/1結點的子結點在son陣列中的下標。
/**
* acwing 143. 最大異或對
* */#include
using
namespace std;
const
int n =
100010
, m =
3000000
;int n, a[n]
;int son[m][2
], idx;
void
insert
(int x)
}int
query
(int x)
else p = son[p]
[b];
}return res;
}int
main()
int ans =0;
for(
int i =
1; i <= n;
++i)
ans =
max(ans,
query
(a[i]))
; cout << ans << endl;
return0;
}
1414. 牛異或
稍難點的題,多了乙個字首和的點。
題目
農夫約翰在給他的奶牛們餵食時遇到了乙個問題。
他共有 n 頭奶牛,編號 1∼n。
每次餵食前,這 n 頭奶牛會按照 1∼n 的順序站成一排。
此外,每頭奶牛都被分配了乙個可能不唯一的整數。
那麼所有被分配的整數就形成了乙個長度為 n 的整數序列。
請你在該整數序列中找出乙個連續的非空子序列,使得子串行中元素的異或和能夠最大。
如果存在多個這樣的序列,那麼選擇序列末端整數對應的奶牛編號更小的那個序列。
如果仍然存在多個可選的序列,那麼選擇長度最短的那個序列。
第一行包含整數 n。
第 2∼n+1 行,每行包含乙個整數,其中第 i 行的整數表示編號為 i−1 的牛被分配的整數值。
輸出三個整數,分別表示最大的異或和,所選序列首端整數對應的奶牛編號,所選序列末端整數對應的奶牛編號。
1 ≤n
≤105
1≤n≤10^5
1≤n≤10
5,分配給奶牛的整數的範圍是 [0,
221−1
][0,2^−1]
[0,221
−1]。
solution
跟上面一題一樣還是套trie,不過要保證題目對左右端點的要求,我們可以列舉ai,然後在a[1]~a[i-1]構成的trie樹中尋找。
#include
using
namespace std;
const
int n =
100010
, m = n *21;
int n, sum[n]
;int son[m][2
], idx, id[m]
;// trie 字典樹
void
insert
(int x,
int k)
id[p]
= k;
}int
query
(int x)
return id[p];}
intmain()
int ans =-1
, l, r;
insert(0
,0);
for(
int i =
1; i <= n;
++i)
insert
(sum[i]
, i);}
cout << ans <<
" "<< l <<
" "<< r << endl;
return0;
}
Trie樹(字典樹)
trie樹的核心思想是用空間換時間,通過在樹中儲存字串的公共字首,來達到加速檢索的目的。例如,對於一棵儲存由英文本母組成的字串的trie樹,如下圖 trie樹在實現的時候,可以用左兒子右兄弟的表示方法,也可以在每個節點處開設乙個陣列,如上圖的方法。trie樹的主要操作是插入 查詢,也可以進行刪除。插...
字典樹 Trie樹
字典樹 trie樹 顧名思義是一種樹形結構,屬於雜湊樹的一種。應用於統計 排序 查詢單詞 統計單詞出現的頻率等。它的優點是 利用字串的公共字首來節約儲存空間,最大限度地減少無謂的字串比較,查詢效率比雜湊表高。字典樹的結構特點 根節點不代表任何字元。其他節點從當前節點回溯到根節點可以得到它代表的字串。...
字典樹 trie樹
amy 56 ann 15 emma 30 rob 27 roger 52首先存入amy,level 0表示根,不持有資料。其餘每個節點持有乙個字元 葉子節點持有資料,且持有的字元為 0 level 0 root a level 1 m level 2 y level 3 0 56 level 4新...