01字典樹典型的題就是找出異或值最大的兩個數,其實跟字典樹差不多的,就是從原來的26位字母變成了0和1,插入操作也跟字典樹差不多,查詢的時候有貪心思想,盡量找同位不相同的。
模板:
1 #include2 #include3 #include4 #include5using
namespace
std;67
const
int n=1e5+5;8
9struct
node
15 }t[n*32];//
陣列大小為數字個數*最大位數
1617
int cnt;//
字典樹上的節點個數
1819
void
init()
2324
//將x插入到01字典樹上
25void insert(int
x)34 cur=t[cur].next[t];35}
36//
插入x
37 t[cur].val=x;38}
3940
//查詢在字典樹中查詢和x異或的值最大的元素
41int query(int
x)51
return
t[cur].val;
52 }
下面幾道例題:
一、hdu 4825 xor sum
給你n個數,m次查詢,輸出n個數中與查詢地數x異或值最大的數,模板題
**:
#include#include#include
#include
using
namespace
std;
const
int n=1e5+5
;struct
node
}t[n*32];//
陣列大小為數字個數*最大位數
int cnt;//
字典樹上的節點個數
void
init()
//將x插入到01字典樹上
void insert(int
x) cur=t[cur].next[t];
}//插入x
t[cur].val=x;}//
查詢在字典樹中查詢和x異或的值最大的元素
int query(int
x)
return
t[cur].val;
}int
main()
printf(
"case #%d:\n
",++cas);
for(int i=1;i<=m;i++)
}return0;
}
字典樹 與 01字典樹
字典樹可以降低空間複雜度 01字典樹可以降低時間複雜度。字典樹 又稱單詞查詢樹,trie樹,是一種樹形結構,是一種雜湊樹的變種。典型應用是用於統計,排序和儲存大量的字串 但不僅限於字串 所以經常被搜尋引擎系統用於文字詞頻統計。它的優點是 利用字串的公共字首來減少查詢時間,最大限度地減少無謂的字串比較...
01字典樹 小結
為了做13年南京網路賽的一道題 學了這個01字典樹 看了別人的模板 之後切了幾道水題 現在總結一下 01字典樹的實現可以看成是把乙個數的二進位制字元化後插入到一顆一般的字典樹中 比如在01字典樹種插入3時 相當於在字典樹中插入00 00011 一共33為,這個根據具體實現不同 查詢最大異或值的時候我...
01字典樹 OR問題
01字典樹 用途 解決區間異或和之類的問題 異或的性質 1.交換律 2.結合律,即 a b c a b c 3.自反性,即x x 0 4.x 0 x 有上述性質,對於區間異或和要知道此性質xor l,r xor 1,l 1 xor 1,r 注意 int型別1 31會溢位 區間異或和的題目 比如給一組...