UVALive 4682 XOR Sum (trie)
题意:求一段连续的数字使得它们的异或和最大。
思路:首先利用前缀和求sum[i],这样求某段连续数字异或和最大就是求某两个j和i满足sum[i]^sum[j-1]最大,问题就变成了找两个数的异或最大。这个问题可以利用tire树完成。首先将空串加入树,即sum[0]。然后枚举i,对于sum[i]先取反,再在tire树上贪心的找可以匹配到的字符串,具体地说就是找高位尽量相同的。找到以后更新答案,再将sum[i]插入到trie树上。
注意一个问题就是trie树空间要开的足够大。
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#include<iostream>
#define inf -100000000
#define LL long long
#define maxn 100005
#define B 32
using namespace std;
int n;
void convers(unsigned int val,char *str)
{
str[B]=;
; i>=; --i)
{
str[i]=val%+';
val/=;
}
}
void reconvers(unsigned int val,char *str)
{
str[B]=;
; i>=; --i)
{
str[i]=(val%)^+';
val/=;
}
}
struct Tire
{
][],end[];
int sz;
int newNode()
{
memset(ch[sz],,sizeof(ch[sz]));
end[sz++]=;
;
}
void clear()
{
sz=;
newNode();
}
void insert(char *word,int v)
{
;
; word[i]; ++i)
{
';
if(!ch[now][x])
ch[now][x]=newNode();
now=ch[now][x];
}
end[now]=v;
}
int solve(char *word)
{
;
; i<B; ++i)
{
';
]&&ch[now][])
now=ch[now][x];
])
now=ch[now][];
])
now=ch[now][];
}
return end[now];
}
};
unsigned ];
Tire tree;
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
; i<=n; ++i)
{
scanf("%u",&sum[i]);
sum[i]^=sum[i-];
}
unsigned ;
tree.clear();
];
convers(,str);
tree.insert(str,);
; i<=n; ++i)
{
];
reconvers(sum[i],word);
int p=tree.solve(word);
ans=max(ans,sum[i]^sum[p]);
convers(sum[i],word);
tree.insert(word,i);
}
printf("%u\n",ans);
}
;
}
UVALive 4682 XOR Sum (trie)的更多相关文章
- HDU 4825:Xor Sum(Trie)
http://acm.hdu.edu.cn/showproblem.php?pid=4825 题意:给出N个数,M个询问,每个询问给出一个X,问在这N个数中哪个数和X异或后结果最大. 思路:可以用Tr ...
- HDU 4825 Xor Sum (trie树处理异或)
Xor Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 132768/132768 K (Java/Others)Total S ...
- UVALive - 7639 G - Extreme XOR Sum(思维)
题目链接 题意 给出一个序列,相邻两两异或,生成一个新序列,再相邻两两异或,直到只剩下一个元素,问最后结果为多少.m个查询,每次都有一个待查询区间. 分析 既然有多组查询,n只是1e4,那么可以考虑预 ...
- HDU 4825-Xor Sum(trie)
题意: 给你一组数,开始询问给一个数 求组中与该数异或值最大的数. 分析:根据异或的特点 要想得到的异或值最大 尽可能的让两个数的每位都相反 先把给定的一组数建树,数的最后一位对应的节点保存这个数的 ...
- hdu 4825 Xor Sum (建树) 2014年百度之星程序设计大赛 - 资格赛 1003
题目 题意:给n个数,m次询问,每次给一个数,求这n个数里与这个数 异或 最大的数. 思路:建一个类似字典数的数,把每一个数用 32位的0或者1 表示,查找从高位向底位找,优先找不同的,如果没有不同的 ...
- 【python】Leetcode每日一题-前缀树(Trie)
[python]Leetcode每日一题-前缀树(Trie) [题目描述] Trie(发音类似 "try")或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的 ...
- hdu 4825 Xor Sum (01 Trie)
链接:http://acm.hdu.edu.cn/showproblem.php?pid=4825 题面: Xor Sum Time Limit: 2000/1000 MS (Java/Others) ...
- HDU 4825 Xor Sum(经典01字典树+贪心)
Xor Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 132768/132768 K (Java/Others) Total ...
- 2014百度之星资格赛—— Xor Sum(01字典树)
Xor Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 132768/132768 K (Java/Others) Total ...
随机推荐
- centos7 安装mariaDB 以及 phpmyadmin的安装
centos7 安装mariaDB 以及 phpmyadmin的安装 一:安装mariadb, mariadb 是 mysql 的一个分支,基本和mysql一样的 1. yum -y install ...
- java 多线程4(死锁)
死锁现象: 死锁原因: 1.存在两个或两个以上的线程. 2.存在两个或两个或两个以上的共享资源. 死锁现象解决的方案: 没有方案只能尽量避免.
- 20145218 《Java程序设计》第01次实验报告
北京电子科技学院(BESTI)实验报告 课程:Java程序设计 班级:1452 指导教师:娄嘉鹏 实验日期:2016.04.08 实验名称:Java开发环境的熟悉(Linux + Eclipse) 实 ...
- HTML5自学笔记[ 20 ]canvas绘图实例之绘制倒影
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- 使用WITH AS提高性能简化嵌套SQL(转载)
使用WITH AS提高性能简化嵌套SQL http://www.cnblogs.com/fygh/archive/2011/08/31/2160266.html
- org.hibernate.LazyInitializationException: could not initialize proxy - no Session
原因:在延迟加载的状态下,使用某个属性时,但session已经关闭. 解决方法: 1.把load改成get,直接加载所有属性. 2.获取对象进行一次判断,如果对象没有初始化,就进行一次初始化. if ...
- java arrayCopy
int[] dest = new int[0]; int[] value = {1,2}; if(value != null && value.length>0) { int[] ...
- android关于uses-permission权限列表
在编写Android程序时经常会忘记添加权限,下面是网上收集的关于Androiduses-permission的资料,方便查找~ android.permission.ACCESS_CHECKIN_P ...
- 菜鸟学习Andriod-弹窗
菜鸟学习Andriod-弹窗 return new AlertDialog.Builder(ZyScreenSaver.this).setIcon( R.drawable.ic_launcher).s ...
- Android Bundle、Handler和Message类介绍
Bundle是一个载体,可以存放基本数据类型.对象等内容,相当于一辆汽车,可以装载很多东西,然后运到需要的地方,例如: Bundle mBundle=new Bundle(); mBundle.put ...