*hdu 5536(字典树的运用)
the total number of test cases.
The first line of each test case is an integer n,
indicating the number of chips produced today. The next line has n integers s1,s2,..,sn,
separated with single space, indicating serial number of each chip.
1≤T≤1000
3≤n≤1000
0≤si≤109
There are at most 10 testcases
with n>100
3
1 2 3
3
100 200 300
400
题意:求下面这个公式的最大值:
maxi,j,k(si+sj)⊕sk
思路:如果用普通方法你要分别枚举3个数,n^3感觉会超时的。
然而完全莫有想到能用字典树,你先把所有的数保存下来,然后删去要用的i和j,再在里面找出能和a[i]+a[j]异或
出的最大值。相当于值需要枚举i和j即可。 /*好机智
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <queue>
#include <vector>
#include <algorithm>
#include <functional>
typedef long long ll;
using namespace std; int a[1005]; struct node
{
int number;
int flag;
int next[2];
void ini()
{
next[0] = next[1] = 0;
flag = 0;
}
} pnode[1000005];
int root = 0;
int tot; void inser(int x)
{
int tt = root;
for(int i = 30; i >= 0; i --)
{
int t;
if(x & (1<<i))t = 1;
else t = 0;
if(!pnode[tt].next[t])
{
pnode[tt].next[t] = ++tot;
pnode[tot].number = t;
}
tt = pnode[tt].next[t];
pnode[tt].flag++;
}
} void delet(int x)
{
int tt = root;
for(int i = 30; i >= 0; i--)
{
int t;
if(x & (1<<i))t = 1;
else t = 0;
tt = pnode[tt].next[t];
pnode[tt].flag --;
}
} int query(int x)
{
int tt = root;
for(int i = 30; i >= 0; i--)
{
int t;
if(x & (1<<i)) t = 1;
else t = 0;
if(t == 1)
{
int nex = pnode[tt].next[0];
if(pnode[nex].flag > 0 && nex) tt = pnode[tt].next[0];
else
{
tt = pnode[tt].next[1];
x ^= (1<<i);
}
}
else
{
int nex = pnode[tt].next[1];
if(pnode[nex].flag > 0 && nex)
{
tt = pnode[tt].next[1];
x ^= (1<<i);
}
else tt = pnode[tt].next[0];
}
}
return x;
} int main()
{
int T,n;
scanf("%d",&T);
while(T--)
{
int ans = 0;
scanf("%d",&n);
tot = 0;
for(int i = 0; i < n; i++) scanf("%d",a+i);
for(int i = 0; i < n; i++) inser(a[i]); for(int i = 0; i < n; i++)
{
delet(a[i]);
for(int j = i+1; j < n; j++)
{
delet(a[j]);
ans = max(ans,query(a[i] + a[j]));
inser(a[j]);
}
inser(a[i]);
}
for(int i = 0;i < tot;i++)
{
pnode[i].ini();
}
printf("%d\n",ans);
}
return 0;
}
*hdu 5536(字典树的运用)的更多相关文章
- Chip Factory HDU - 5536 字典树(删除节点|增加节点)
题意: t组样例,对于每一组样例第一行输入一个n,下面在输入n个数 你需要从这n个数里面找出来三个数(设为x,y,z),找出来(x+y)^z(同样也可以(y+z)^1)的最大值 ("^&qu ...
- HDU 5536 字典树
题意:就是公式. 这现场赛O(n^3)能过,觉得太没天理了. 做法:字典树,枚举两个数,然后在字典树上贪心的跑. #include <bits/stdc++.h> using namesp ...
- HDU 5687 字典树插入查找删除
题目:http://acm.hdu.edu.cn/showproblem.php?pid=5687 2016百度之星资格赛C题,直接套用字典树,顺便巩固了一下自己对字典树的理解 #include< ...
- HDU 5384 字典树、AC自动机
题目:http://acm.hdu.edu.cn/showproblem.php?pid=5384 用字典树.AC自动机两种做法都可以做 #include<stdio.h> #includ ...
- hdu 2112(字典树+最短路)
HDU Today Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- hdu 2072(字典树模板,set,map均可做)
地址:http://acm.hdu.edu.cn/showproblem.php?pid=2072 lily的好朋友xiaoou333最近很空,他想了一件没有什么意义的事情,就是统计一篇文章里不同单词 ...
- hdu 1251 字典树的应用
这道题看了大神的模板,直接用字典树提交的会爆内存,用stl 里的map有简单有快 #include <iostream> #include <map> #include < ...
- hdu 2896 字典树解法
#include <iostream> #include <cstring> #include <cstdio> #include <cstdlib> ...
- Repository HDU - 2846 字典树
题意:给出很多很多很多很多个 单词 类似搜索引擎一下 输入一个单词 判断有一个字符串包含这个单词 思路:字典树变体,把每个单词的后缀都扔字典树里面,这里要注意dd是一个单词 但是把d 和dd都放字典树 ...
- Phone List HDU - 1671 字典树
题意:给出一堆一组一组的数字 判断有没有哪一个是另外一个的前缀 思路:字典树 插入的同时进行判断 不过 当处理一组数字的时候 需要考虑的有两点1.是否包含了其他的序列2.是否被其他序列包含 刚开始 ...
随机推荐
- vim配置之taglist插件安装
上次说了不带插件的vim配置,今天补充两个,来日方长,不定期更新: 首先看一个路径: 下载ctags,将其中的ctags.exe复制到上边目录下边: 地址:https://sourceforge.ne ...
- 201421123042 《Java程序设计》第14周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结与数据库相关内容. 答: 2. 使用数据库技术改造你的系统 2.1 简述如何使用数据库技术改造你的系统.要建立什么表?截图你的表设计 ...
- JAVA_SE基础——2.环境变量的配置&测试JDK
哈喽,利用晚上的空余时间再写篇心的~~~ 谢谢大家 前一篇文章 JAVA_SE基础--JDK&JRE下载及安装http://blog.csdn.net/thescript_j/article ...
- python小练习之一
下面的练习本身不难,比如打印1到10,计算1+2+3+...+100 ,最后一个是计算 1-2+3-4...-100 用了类的方法实现 用了列表生成器 用"高级"一丢丢的写法来实现 ...
- Windows中添加自己的程序到开机启动中(添加服务,添加注册表)
在系统启动的时候启动自己想要启动的程序: 方法一:利用开机启动文件夹 将exe文件或exe文件的快捷方式复制到(启动)文件夹下 以win7为例:开始→所有程序→启动→鼠标右键打开 方法二:添加系统服务 ...
- C#-获取字符的GBK编码值
public static int GetGBKValue(string key) { byte[] gbk = Encoding.GetEncoding("GBK").GetBy ...
- python 中 reduce 函数的使用
reduce()函数也是Python内置的一个高阶函数. reduce()函数接收的参数和 map()类似,一个函数 f,一个list,但行为和 map()不同,reduce()传入的函数 f 必须接 ...
- ios开发常识(1)开发语言和参考资料
学iphone开发用的语言是object-c,object-c和c++,java还是有很大区别,如果你坚持学习iphone开发的话可以不学c++,java,直接学习这个语言,先入为主,可能觉得这个语言 ...
- 官网jquery压缩版引用地址:
3.1.1版本 <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...
- NetSNMP开源代码学习——mib扩展
扩展MIB库关于MIB库的扩展网络文章非常多,这里我主要参考了http://blog.csdn.net/qq_27204267/article/details/51595708,这篇文章介绍的比较简单 ...