您的位置:首页 > 健康 > 养生 > erp教学零基础入门_苏州做网站的公司有哪些_深圳seo顾问_百度分析工具

erp教学零基础入门_苏州做网站的公司有哪些_深圳seo顾问_百度分析工具

2025/4/3 20:07:53 来源:https://blog.csdn.net/2202_75344116/article/details/146442343  浏览:    关键词:erp教学零基础入门_苏州做网站的公司有哪些_深圳seo顾问_百度分析工具
erp教学零基础入门_苏州做网站的公司有哪些_深圳seo顾问_百度分析工具

题目来自洛谷网站:

思路:

两个循环时间复杂度太高了,会超时。
我们可以先将读入的数字,插入到字典树中,从高位到低位。对每个数查询的时候,题目要求是最大的异或对,所以我们选择相反的路径,构造最大异或值。

代码:

#include<bits/stdc++.h>
using namespace std;
const int N = 100010;int n;
int arr[N];
int ch[N*31][2], idx;//idx给树上每个节点一个编号void trie(int x){int p = 0;//p是当前走到了哪个节点编号for(int i = 30; i >= 0; i--){//取出最后一个数字//判断0 1int j = x>>i&1;if(!ch[p][j]) ch[p][j] = ++idx;p = ch[p][j];}
}int query(int x){int p = 0, res = 0;for(int i = 30; i >= 0; i--){int j = x>>i&1;//相反的一边if(ch[p][!j]){res += 1<<i;p = ch[p][!j];}else p = ch[p][j];}return res;
}int main(){cin >> n;for(int i = 1; i<=n; i++){cin >> arr[i];trie(arr[i]);}int ans = -1;for(int i = 1; i<=n; i++){ans = max(ans, query(arr[i]));}cout << ans << endl;return 0;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com