题目描述

在给定的 $N$ 个整数 $A_1,A_2,A_3...A_n$ 中选出两个进行异或运算,得到的结果最大是多少?

输入格式

第一行一个整数$N$。

第二行$N$个整数$A_i$。

输出格式

一个整数表示答案。

样例

样例输入

5
2 9 5 7 0

样例输出

14

数据范围与提示

对于$100%$的数据,$1≤N≤10^5$,$0≤Ai<2^{31}$。

题解

这位朋友,你看这道题这样简洁,必然是很能拓展的题啊。

首先把每个数拆分二进制,从最高位(31位)开始,往0位走,算作一个字符串,丢到Trie里。

eg:$13->$

$[1][0][1][1][0][0]..............[0][0]$

$0<------------31$

然后循环每个数

对于一个数$x$,先拆二进制。

然后从最高位(31位)开始扫。

对于每一位,如果在Trie上对应走到了的点有与该位不同的支路(该位为0,支路为1/该位为1,支路为0),那就走。

则对答案的贡献为$(1<<i)$,所以$ans+=(1<<i)$($i$为当前位数)。

这样走出来的就是最优解了。

证明:如果在当前位能得到贡献而不走,之后就算每一位都能有贡献,$(1<<(j-1))+(1<<(j-2))+...+(1<<0) < (1<<j)$,也划不来。

所以贪心的去跑,最后得到的ans就是选这个$x$能得到的最优解了。

最后再记个max,即为答案。

 编号     题目     状态     分数     总时间     内存     代码 / 答案文件     提交者     提交时间
# #. 「一本通 2.3 例 」The XOR Largest Pair Accepted ms KiB C++ / 1.2 K qwerta -- :: #include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
struct emm{
int nxt[];
}a[];//不会数数的傻子hzz一开始RE了好久qwq
int s[];
int b[];//用来拆二进制的数组
int main()
{
//freopen("data9.in","r",stdin);
int n;
scanf("%d",&n);
int cnt=;
for(int i=;i<=n;++i)
{
//cout<<i<<endl;
scanf("%d",&s[i]);//读入
//读了就丢进Trie
int x=s[i],g=-;
memset(b,,sizeof(b));
while(x)
{
b[++g]=x&;
x>>=;
}
int k=;
for(int j=;j>=;--j)//从高往低建
{
if(!a[k].nxt[b[j]])
a[k].nxt[b[j]]=++cnt;
k=a[k].nxt[b[j]];
}
}
long long ans=;
for(int i=;i<=n;++i)
{
long long now=;
int x=s[i],j=-;//循环x
memset(b,,sizeof(b));
while(x)
{
b[++j]=x&;
x>>=;
}
int k=;
for(int j=;j>=;--j)
{
if(a[k].nxt[-b[j]])//尽量往不一样的去走
{
now+=(<<j);
k=a[k].nxt[-b[j]];
}
else k=a[k].nxt[b[j]];
}
ans=max(ans,now);
}
cout<<ans;
return ;
}

「LOJ#10050」「一本通 2.3 例 2」The XOR Largest Pair (Trie的更多相关文章

  1. 「LOJ#10051」「一本通 2.3 例 3」Nikitosh 和异或(Trie

    题目描述 原题来自:CODECHEF September Challenge 2015 REBXOR 1​​≤r​1​​<l​2​​≤r​2​​≤N,x⨁yx\bigoplus yx⨁y 表示 ...

  2. LOJ#10064. 「一本通 3.1 例 1」黑暗城堡

    LOJ#10064. 「一本通 3.1 例 1」黑暗城堡 题目描述 你知道黑暗城堡有$N$个房间,$M$条可以制造的双向通道,以及每条通道的长度. 城堡是树形的并且满足下面的条件: 设$D_i$为如果 ...

  3. LOJ #10131 「一本通 4.4 例 2」暗的连锁

    LOJ #10131 「一本通 4.4 例 2」暗的连锁 给一棵 \(n\) 个点的树加上 \(m\) 条非树边 , 现在需要断开一条树边和一条非树边使得图不连通 , 求方案数 . $n \le 10 ...

  4. 「LOJ#10043」「一本通 2.2 例 1」剪花布条 (KMP

    题目描述 原题来自:HDU 2087 一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案.对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢? 输入格式 输入数据 ...

  5. 「一本通 1.3 例 5」weight]

    「一本通 1.3 例 5」weight 题面 给定原数列 \(a_1,a_2,a_n\) ,给定每个数的前缀和以及后缀和,并且打乱顺序. 给出一个集合 \(S\) 要求从集合 \(S\) 中找到合适的 ...

  6. 「LOJ#10072」「一本通 3.2 例 1」Sightseeing Trip(无向图最小环问题)(Floyd

    题目描述 原题来自:CEOI 1999 给定一张无向图,求图中一个至少包含 333 个点的环,环上的节点不重复,并且环上的边的长度之和最小.该问题称为无向图的最小环问题.在本题中,你需要输出最小环的方 ...

  7. 「LOJ#10034」「一本通 2.1 例 2」图书管理 (map

    题目描述 图书管理是一件十分繁杂的工作,在一个图书馆中每天都会有许多新书加入.为了更方便的管理图书(以便于帮助想要借书的客人快速查找他们是否有他们所需要的书),我们需要设计一个图书查找系统. 该系统需 ...

  8. Loj 10115 「一本通 4.1 例 3」校门外的树 (树状数组)

    题目链接:https://loj.ac/problem/10115 题目描述 原题来自:Vijos P1448 校门外有很多树,学校决定在某个时刻在某一段种上一种树,保证任一时刻不会出现两段相同种类的 ...

  9. LOJ #10132. 「一本通 4.4 例 3」异象石

    题目地址 LOJ 题解 神仙思路.思路参考自<算法竞赛进阶指南>. 考虑维护dfs序中相邻两个石头的距离,那么每次?的答案就是sum/2(首尾算相邻) 然后维护一下拿个平衡树/set维护一 ...

随机推荐

  1. js中 opener和parent的差别

    opener即谁打开我的,比方A页面利用window.open弹出了B页面窗体.那么A页面所在窗体就是B页面的opener.在B页面通过opener对象能够訪问A页面. parent表示父窗体,比方一 ...

  2. Swift开发教程--怎样设置状态栏的文字颜色

    第一步:在Info.plist中设置UIViewControllerBasedStatusBarAppearance 为NO 第二步:在viewDidLoad中加一句 UIApplication.sh ...

  3. 首页底部菜单FragmentTabHost的使用

    一般现在的菜单都是底部FragmentTabHost,切换Fragment来实现的,今天我们就使用这个来看看如何实现的 首先是布局文件 <?xml version="1.0" ...

  4. 【BZOJ2337】[HNOI2011]XOR和路径 期望DP+高斯消元

    [BZOJ2337][HNOI2011]XOR和路径 Description 题解:异或的期望不好搞?我们考虑按位拆分一下. 我们设f[i]表示到达i后,还要走过的路径在当前位上的异或值得期望是多少( ...

  5. [原创]实现多层DIV叠加的js事件穿透

    Flash里面有个很好的特性是,一个容器里,不存在实际对象的部分,不会阻拦鼠标事件穿透到下一层. 前端就不一样了,两个div层叠以后,上层div会接收到所有事件(即使这个div里面内容是空的,没有任何 ...

  6. 两个Java项目之间相互调用

    转自:http://dysfzhoulong.iteye.com/blog/1008747 一个项目A另一个项目B:(项目A和项目B都是Java写的项目) 在A项目中怎么调用B项目中的类和方法 有两种 ...

  7. python基础16 ----面向对象程序设计二

    一.继承与派生 1.继承的定义:继承是一种创建新类的方式,即在类中提取共同的部分创建出一个类,这样的类称为父类,也可称为基类和超类,新建的类称为派生类或子类. 2.单继承:就相当于子类继承了一个父类. ...

  8. iOS 代码延迟执行

    1. [NSTread sleepForTimeInterval:0.8f] 这个方法 实际效果 好比打断点 等你再恢复断点执行 2.  [self performSelector:@selector ...

  9. Data Structure Binary Tree: Diameter of a Binary Tree

    http://www.geeksforgeeks.org/diameter-of-a-binary-tree/ #include <iostream> #include <vecto ...

  10. 第一章 python中重要的数据结构(上)

    最近,由于工作需要,使用python开发公司的运维自动化平台,所以找本书来并结合官方手册,开始python的学习之旅. 一.列表 [含义]:列表用中括号表示,通过逗号进行分隔一组数据(可以为不同的数据 ...