CSU1216: 异或最大值(01Trie树)
Hint
毒瘤老师给学弟们出这种题真的好么qwq。
难不成想让他们现场构造01trie这种数据结构?雾
#include<cstdio> #include<algorithm> #include<cstring> #define LL long long using namespace std; const int MAXN = 1e5 + 10, B = 32; int N, ch[MAXN][2], a[MAXN], tot; void init() { memset(ch, 0, sizeof(ch)); tot = 0; } void insert(LL x) { int now = 0; for(int i = B; i >= 0; i--) { bool nxt = (x >> i & 1); if(!ch[now][nxt]) ch[now][nxt] = ++tot; now = ch[now][nxt]; } } LL Query(LL x) { LL now = 0, ret = 0; for(int i = B; i >= 0; i--) { bool nxt = (x >> i & 1) ^ 1; if(ch[now][nxt]) ret = ret | (1ll << i), now = ch[now][nxt]; else now = ch[now][nxt ^ 1]; } return ret; } int main() { //freopen("a.in", "r", stdin); while(~scanf("%d", &N)) { init(); for(int i = 1; i <= N; i++) scanf("%d", &a[i]), insert(a[i]); LL ans = 0; for(int i = 1; i <= N; i++) ans = max(ans, Query(a[i])); printf("%lld\n", ans); } return 0; } /********************************************************************** Problem: 1216 User: attack Language: C++ Result: AC Time:124 ms Memory:2292 kb **********************************************************************/
作者:自为风月马前卒
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步