题意:给出A数组,B数组,你可以对A和B分别进行重排列,使得C[i]=A[i]^B[i]的字典序最小。

思路:对于这类题,显然需要建立字典树,然后某种形式取分治,或者贪心。  假设现在有了两颗字典树A,B,显然尽量让同方向的先匹配。

而且同一棵树的左右两边相互不影响,所以可以直接贪:如果A树上出发左走有x个数字,B左走有y个数字,那么一定会左匹配min(x,y);右匹配同理; 剩下的交叉匹配;

看代码应该就会看懂了:add建立字典树。

dfs进行匹配;  (i,j)从前往后分别是,(0,0) (1,1),(0,1) (1,0)保证了相同的先匹配。

#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
const int maxn=;
int ch0[maxn*][],ch1[maxn*][],tot0,tot1;
int ans[maxn],num,sum0[maxn*],sum1[maxn*];
void init()
{
rep(i,,tot0) rep(j,,) ch0[i][j]=;
rep(i,,tot1) rep(j,,) ch1[i][j]=;
tot0=tot1=num=;
}
void add(int ch[][],int sum[],int x,int &tot)
{
for(int i=,now=;i>=;i--){
int t=(x>>i)&;
if(!ch[now][t]) ch[now][t]=++tot;
now=ch[now][t];
sum[now]++;
}
}
void dfs(int now0,int now1,int cost,int dep)
{
int e=min(sum0[now0],sum1[now1]);
sum0[now0]-=e; sum1[now1]-=e;
if(dep==-) {
rep(i,,e) ans[++num]=cost;
return ;
}
rep(k,,){
int i=k&,j=i^; if(k<=) j=i;
if(sum0[ch0[now0][i]]&&sum1[ch1[now1][j]])
dfs(ch0[now0][i],ch1[now1][j],cost+(i==j?:(<<dep)),dep-);
}
}
int main()
{
int T,N,x;
scanf("%d",&T);
while(T--){
init();
scanf("%d",&N);
rep(i,,N){
scanf("%d",&x);
add(ch0,sum0,x,tot0);
}
rep(i,,N){
scanf("%d",&x);
add(ch1,sum1,x,tot1);
}
dfs(,,,);
sort(ans+,ans+N+);
rep(i,,N-) printf("%d ",ans[i]);
printf("%d\n",ans[N]);
}
return ;
}

HDU6625: three arrays (字典树处理xor)的更多相关文章

  1. hdu多校第五场1002 (hdu6625) three arrays 字典树/dfs

    题意: 给你两个序列a,b,序列c的某位是由序列a,b的此位异或得来,让你重排序列ab,找出字典序最小的序列c. 题解: 如果能找到a,b序列中完全一样的值当然最好,要是找不到,那也尽量让低位不一样. ...

  2. 字典树-THE XOR largest pair

    题目:给你n个数字A1,A2....An ,问从中选出两个数字异或运算得到的最大结果是多少 0<=Ai<231 用字典树,记录每个数字的31位2进制01串(int 为4个字节,每个字节8个 ...

  3. 字典树 && 例题 Xor Sum HDU - 4825 (板子)

    一.字典树描述:Trie树,即字典树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种.典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计.它的优 ...

  4. 双01字典树最小XOR(three arrays)--2019 Multi-University Training Contest 5(hdu杭电多校第5场)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6625 题意: 给你两串数 a串,b串,让你一一配对XOR使得新的 C 串字典序最小. 思路: 首先这边 ...

  5. [2019杭电多校第五场][hdu6625]three arrays(01字典树)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6625 大意为给你两个数组a和b,对应位置异或得到c数组,现在可以将a,b数组从新排序求c数组,使得字典 ...

  6. three arrays HDU - 6625 (字典树)

    three arrays \[ Time Limit: 2500 ms \quad Memory Limit: 262144 kB \] 题意 给出 \(a\),\(b\) 数组,定义数组 \(c[i ...

  7. hdu5536 字典树xor

    一想到xor还要求最大类似的题,字典树效率高. 此代码c++ TLE. #include<stdio.h> #include<string.h> ; struct node { ...

  8. HDU 4825 Xor Sum(经典01字典树+贪心)

    Xor Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 132768/132768 K (Java/Others) Total ...

  9. 字典树-百度之星-Xor Sum

    Xor Sum Problem Description Zeus 和 Prometheus 做了一个游戏,Prometheus 给 Zeus 一个集合,集合中包括了N个正整数,随后 Prometheu ...

随机推荐

  1. 技嘉Z390 AORUS MASTER+酷睿I9超频5.0GHz教程

    注:调整每项值的时候,需要手动用键盘输入数字,按回车确定.(只按回车并不会出现选择项) Core i9-9900K也出来了一段时间了,这个号称“地表最强游戏U”也成了很多人最新的目标.网上也有大佬表示 ...

  2. PatchMatch小详解

    最近发了两片patch match的,其实自己也是有一些一知半解的,找了一篇不知道谁的大论文看了看,又回顾了一下,下面贴我的笔记. The PatchMatch Algorithm patchmatc ...

  3. 【转帖】Linux文件夹对比并提取的差分文件技巧-rsync的妙用

    Linux文件夹对比并提取的差分文件技巧-rsync的妙用 [日期:2016-02-13] 来源:oschina.net  作者:mengshuai [字体:大 中 小] https://www.li ...

  4. IDEA中Tomcat部署时war和war exploded区别

    原理说明 war模式:将WEB工程以包的形式上传到服务器 :war exploded模式:将WEB工程以当前文件夹的位置关系上传到服务器: 含义解释 war模式这种可以称之为是发布模式,看名字也知道, ...

  5. Windows docker k8s asp.net core

    在上一篇文章 Ubuntu 18 Kubernetes的Install and Deploy 我们在ubuntu在部署了k8s集群, 今天来看看windows下怎么搞. 主要点有: 1) window ...

  6. Application.mk文件官方使用说明

    本文档介绍了 ndk-build 所使用的 Application.mk 编译文件. 我们建议先阅读概念页面,然后再阅读本页面. 概览 Application.mk 指定了 ndk-build 的项目 ...

  7. FusionInsight大数据开发---Oozie应用开发

    Oozie应用开发 要求: 了解Oozie应用开发适用场景 掌握Oozie应用开发 熟悉并使用Oozie常用API Oozie简介 Oozie是一个Hadoop作业的工作流调度管理系统 Oozie工作 ...

  8. java -jar参数运行方式设置classpath

    转载自:https://www.cnblogs.com/aggavara/archive/2012/11/16/2773246.html 当用java -jar yourJarExe.jar来运行一个 ...

  9. Ubuntu系统下基于docker部署Jenkins环境

    本文是在ubuntu环境下安装jenkins,jenkins运行在docker容器中, 至于docker如何安装,请参考https://www.cnblogs.com/xingyunqiu/p/115 ...

  10. spark过滤算子+StringIndexer算子出发的一个逻辑bug

    问题描述: 在一段spark机器学习的程序中,同时用到了Filter算子和StringIndexer算子,其中StringIndexer在前,filter在后,并且filter是对stringinde ...