首页 > 其他 > 详细

用trie树解决最大异或对问题(On)

时间:2020-01-21 11:52:12      阅读:76      评论:0      收藏:0      [点我收藏+]

在给定的N个整数A1A2ANA1,A2……AN中选出两个进行xor(异或)运算,得到的结果最大是多少?

输入格式

第一行输入一个整数N。

第二行输入N个整数A1A1~ANAN。

输出格式

输出一个整数表示答案。

数据范围

1N1051≤N≤105,
0Ai<2310≤Ai<231

输入样例:

3
1 2 3

输出样例:

3

##########################################################################
技术分享图片
 1 #include <iostream>
 2 #include <algorithm>
 3 using namespace std;
 4 
 5 const int N = 1e5+10;
 6 const int M = 300e4+10;
 7 int arr[N];
 8 int son[M][2];
 9 int flag[M], idx;
10 
11 void insert(int x){
12     int k = 30;
13     int p = 0;
14     while(k >= 0){
15         int tmp = x >> k & 1;
16         if(!son[p][tmp]) son[p][tmp] = ++idx;
17         p = son[p][tmp];
18         --k;
19     }
20     flag[p]++;
21 }
22 int main(){
23     int res = 0;
24     int n;
25     cin >> n;
26     for(int i = 0;i < n;++i){
27         cin >> arr[i];
28         insert(arr[i]);
29     }
30     for(int i = 0;i < n;++i){
31         int k = 30;
32         int p = 0;
33         int sum = 0;
34         while(k >= 0){
35             int tmp = arr[i]>>k & 1;
36             if(son[p][!tmp]){
37                  p = son[p][!tmp];
38                  sum += 1 << k;
39             }
40             else p = son[p][tmp];
41             --k;
42         }
43         res = max(res,sum);
44     }
45     cout << res ;
46     return 0;
47 }
View Code

 

end

用trie树解决最大异或对问题(On)

原文:https://www.cnblogs.com/sxq-study/p/12220880.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!