農夫約翰在給他的奶牛們餵食時遇到了乙個問題。
他共有 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樹的主要操作是插入 查詢,也可以進行刪除。插...