trie字典樹acwing題組

2021-10-18 19:23:28 字數 2320 閱讀 8741

農夫約翰在給他的奶牛們餵食時遇到了乙個問題。

他共有 n

頭奶牛,編號 1∼n

每次餵食前,這 n

頭奶牛會按照 1∼n

的順序站成一排。

此外,每頭奶牛都被分配了乙個可能不唯一的整數。

那麼所有被分配的整數就形成了乙個長度為 n

的整數序列。

請你在該整數序列中找出乙個連續的非空子序列,使得子串行中元素的異或和能夠最大。

如果存在多個這樣的序列,那麼選擇序列末端整數對應的奶牛編號更小的那個序列。

如果仍然存在多個可選的序列,那麼選擇長度最短的那個序列。

輸入格式

第一行包含整數 n

第 2∼n+1

行,每行包含乙個整數,其中第 i 行的整數表示編號為 i−1

的牛被分配的整數值。

輸出格式

輸出三個整數,分別表示最大的異或和,所選序列首端整數對應的奶牛編號,所選序列末端整數對應的奶牛編號。

資料範圍

1≤n≤105

,分配給奶牛的整數的範圍是 [0,221−1]

。輸入樣例:51

0542

輸出樣例:

6 4 5

#include

using

namespace std;

const

int n=

1e7+10;

int sum[n]

;int trie[n][4

];int id[n]

;int n;

int idex;

void

insert

(int a,

int b)

p=trie[p]

[u];

} id[p]

=b;}

intqur

(int a)

else

}return id[p];}

intmain()

int ans=

0,ans1,ans2;

insert

(sum[0]

,0);

for(

int i=

0;i<=n;i++

)insert

(sum[i]

,i);}if

(n==1)

cout<" "<" "<}

在給定的n個整數a1,a2……an

中選出兩個進行xor(異或)運算,得到的結果最大是多少?

輸入格式

第一行輸入乙個整數n。

第二行輸入n個整數a1

~an。

輸出格式

輸出乙個整數表示答案。

資料範圍

1≤n≤105

,0≤ai<231

輸入樣例:

31 2 3

輸出樣例:

#include

using

namespace std;

const

int n=

1e7+10;

int a[n]

;int n;

int trie[n][4

];int idex;

void

insert

(int a)

return;}

long

long

qur(

int a)

else

}return ans;

}int

main()

long

long res=0;

for(

int i=

1;i<=n;i++

) cout

}

維護乙個字串集合,支援兩種操作:

「i x」向集合中插入乙個字串x;

「q x」詢問乙個字串在集合**現了多少次。

共有n個操作,輸入的字串總長度不超過 105

,字串僅包含小寫英文本母。

輸入格式

第一行包含整數n,表示運算元。

接下來n行,每行包含乙個操作指令,指令為」i x」或」q x」中的一種。

輸出格式

對於每個詢問指令」q x」,都要輸出乙個整數作為結果,表示x在集合**現的次數。

每個結果佔一行。

資料範圍

1≤n≤2∗104

輸入樣例:

5i abc

q abc

q ab

i ab

q ab

輸出樣例:10

1

trie字典樹 模板題

字典樹是一種實現字串快速檢索的多叉樹結構。每個節點都擁有很多個指標。1 include 2 include 3 using namespace std 4 5 const int n 1e6 5,m 5e5 5 6 7 int trie m 26 tot 0,cnt m 陣列模擬樹,8 cnt i ...

trie字典樹 模板題

字典樹是一種實現字串快速檢索的多叉樹結構。每個節點都擁有很多個指標。1 include 2 include 3 using namespace std 4 5 const int n 1e6 5,m 5e5 5 6 7 int trie m 26 tot 0,cnt m 陣列模擬樹,8 cnt i ...

Trie樹(字典樹)

trie樹的核心思想是用空間換時間,通過在樹中儲存字串的公共字首,來達到加速檢索的目的。例如,對於一棵儲存由英文本母組成的字串的trie樹,如下圖 trie樹在實現的時候,可以用左兒子右兄弟的表示方法,也可以在每個節點處開設乙個陣列,如上圖的方法。trie樹的主要操作是插入 查詢,也可以進行刪除。插...