题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5536

题意:有一个数组a[], 包含n个数,从n个数中找到三个数使得 (a[i]+a[j])⊕a[k]最大,i,j,k不同;

求异或的结果最大所以我们可以用01字典树,先把所有的数加入字典树中,从n个数中选出两个数a[i]和a[j],

先把他们从字典树中删除,然后找到与a[i]+a[j]异或最大的数,和结果取最大值即可;

最后不要忘记再把a[i]和a[j]添加到字典树中即可;

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
#include<vector>
#include<queue>
#include<set>
using namespace std;
#define met(a, b) memset(a, b, sizeof(a))
#define N 1005
#define INF 0x3f3f3f3f
typedef long long LL; struct node
{
int num, sum;///num是当前的数,sum表示是否存在;
node* Next[];
}; void Add(node* head, int x, int cnt)
{
node *p = head;///移动指针;
for(int i=; i>=; i--)
{
int k = (x>>i)&;///表示x对应的二进数从右边数第i位是k(0或1);
if(p->Next[k] == NULL)///如果不存在就新建一个节点;
{
node* q = new node();
p->Next[k] = q;
}
p = p->Next[k];///移动指针指向下一节点;
p->sum += cnt;///当前节点可达;更新一下,如果是添加x则+1,删除x则-1;
}
p->num = x;///在结束的时候记录从head到当前位置所表示的数是x;
}
int Find(node* head, int x)
{
node *p = head;
for(int i=; i>=; i--)
{
int k = (x>>i)&;
if(p->Next[k^] != NULL && p->Next[k^]->sum > )///每次尽量往不同的方向走,前提是存在不同的节点;
p = p->Next[k^];
else
p = p->Next[k];
}
return (p->num^x);///最后找到的p->num就是与x异或最大的数;
}
int main()
{
int T;
scanf("%d", &T);
while(T--)
{
int n, a[N];
node *head = new node();
scanf("%d", &n);
for(int i=; i<=n; i++)
{
scanf("%d", &a[i]);
Add(head, a[i], );///添加所有的数到字典树中去;
}
int ans = ;
///从n个数中选出两个数a[i]和a[j],先把他们从字典树中删除,
///然后找到与a[i]+a[j]异或最大的数,和结果取最大值即可;
///最后不要忘记再把a[i]和a[j]添加到字典树中即可;
for(int i=; i<=n; i++)
{
Add(head, a[i], -);
for(int j=; j<=n; j++)
{
if(i==j)continue;
Add(head, a[j], -);
int ret = Find(head, a[i]+a[j]);
ans = max(ans, ret);
Add(head, a[j], );
}
Add(head, a[i], );
}
printf("%d\n", ans);
}
return ;
}

Chip Factory---hdu5536(异或值最大,01字典树)的更多相关文章

  1. AcWing 144. 最长异或值路径 01字典树打卡

    给定一个树,树上的边都具有权值. 树中一条路径的异或长度被定义为路径上所有边的权值的异或和: ⊕ 为异或符号. 给定上述的具有n个节点的树,你能找到异或长度最大的路径吗? 输入格式 第一行包含整数n, ...

  2. AcWing:143. 最大异或对(01字典树 + 位运算 + 异或性质)

    在给定的N个整数A1,A2……ANA1,A2……AN中选出两个进行xor(异或)运算,得到的结果最大是多少? 输入格式 第一行输入一个整数N. 第二行输入N个整数A1A1-ANAN. 输出格式 输出一 ...

  3. Codeforces 979 D. Kuro and GCD and XOR and SUM(异或和,01字典树)

    Codeforces 979 D. Kuro and GCD and XOR and SUM 题目大意:有两种操作:①给一个数v,加入数组a中②给出三个数x,k,s:从当前数组a中找出一个数u满足 u ...

  4. 51Nod XOR key —— 区间最大异或值 可持久化字典树

    题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1295 1295 XOR key  题目来源: HackerRa ...

  5. Codeforces Round #367 (Div. 2)---水题 | dp | 01字典树

    A.Beru-taxi 水题:有一个人站在(sx,sy)的位置,有n辆出租车,正向这个人匀速赶来,每个出租车的位置是(xi, yi) 速度是 Vi;求人最少需要等的时间: 单间循环即可: #inclu ...

  6. [HDU-5536] Chip Factory (01字典树)

    Problem Description John is a manager of a CPU chip factory, the factory produces lots of chips ever ...

  7. Chip Factory(HDU5536 + 暴力 || 01字典树)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5536 题目: 题意: 对于给定的n个数,求出三个下标不同的数使得(si+sj)^sk最大. 思路: ...

  8. BZOJ 4260 Codechef REBXOR (区间异或和最值) (01字典树+DP)

    <题目链接> 题目大意:给定一个序列,现在求出两段不相交的区间异或和的最大值. 解题分析: 区间异或问题首先想到01字典树.利用前缀.后缀建树,并且利用异或的性质,相同的两个数异或变成0, ...

  9. Chip Factory(01字典树)

    Chip Factory http://acm.hdu.edu.cn/showproblem.php?pid=5536 Time Limit: 18000/9000 MS (Java/Others)  ...

随机推荐

  1. 12个实用的 Javascript 奇淫技巧

    这里分享12个实用的 Javascript 奇淫技巧.JavaScript自1995年诞生以来已过去了16个年头,如今全世界无数的网页在依靠她完成各种关键任务,JavaScript曾在Tiobe发布的 ...

  2. 利用Oracle的row_number() over函数消除重复的记录

    .select d.id,d.outer_code from dict_depts_source d order by outer_code(查看重复数据) .select d.id,d.outer_ ...

  3. httpclient爬取性感美图

    依赖httpclient4.2,Jsop SemeiziCrawler.java package kidbei.learn.crawler; import java.io.File; import j ...

  4. Servlet连接数据库及日期格式转换

    package oracleFactory; import java.io.IOException; import java.io.PrintWriter; import java.sql.Conne ...

  5. 新浪微博API开放平台进行程序开发第一步(java)

    申请开发者权限步骤: 1.登录sina微博,点击“应用” 2.点击“微博开发平台 我也要做开发者” 3.点击“我的应用”,填写“开发者信息” 4.点击“创建应用”,就是你将要开发的微博应用程序,可以是 ...

  6. [转]禁用和启用链接(a元素|LinkButton)的js方法

    本文转自:http://www.cnblogs.com/beiguren/archive/2010/05/24/1742926.html 在Asp.net中,有时候需要禁用掉一个a链接元素. 在服务器 ...

  7. 对于默认 Windows NT 安装的 SID 值

    https://support.microsoft.com/en-us/kb/163846/zh-cn

  8. Bind的DNS解析设置forward - 阿权的书房

    bind有一项功能是forward,也就是只是做dns缓存. 适用以下情况: 1 做临时测试,不想向上级申请修改ns记录2 不想向上级申请修改ns记录但希望交给另外的服务器处理3 只有有限的公网IP, ...

  9. [IT思考]技术领先对手多少算好?

    坦白讲,很多做技术的公司,总是觉得技术越“牛”越好.但是,历史也曾经出现过,很多公司技术的确很棒,但是市场反响一般(待补充案例).结果可想而知. 要知道,每一个新技术,尤其是业界领先的新技术,需要不少 ...

  10. thread、operation、GCD

    // ViewController.m #import "ViewController.h" @interface ViewController () { //任务队列,能够自动管 ...