[2019杭电多校第五场][hdu6625]three arrays(01字典树)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6625
大意为给你两个数组a和b,对应位置异或得到c数组,现在可以将a,b数组从新排序求c数组,使得字典序最小。
大致的做法就是用两个数组中的数字二进制 建两颗字典树,同时记录每个位置的个数。然后在两颗字典树上同时dfs,优先往0-0和1-1方向走,不能走再走0-1,1-0方向。
因为0-0和1-1两种情况不分先后,所以走出来的不一定是最小的,走完得到的c数组要排序。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
typedef long long ll;
const int maxn = + ;
struct Trie {
int tree[maxn * ][], num[maxn * ];
int len, root;
int newcode() {
tree[len][] = tree[len][] = ;
num[len] = ;
return len++;
}
void init() {
len = ;
root = newcode();
}
void insert(int x) {
int now = root;
for (int i = ; i >= ; i--) {
int k = (x >> i) & ;
if (!tree[now][k])
tree[now][k] = newcode();
now = tree[now][k];
num[now]++;
}
}
}A, B;
int ans[maxn];
void slove(int n) {
for (int i = ; i <= n; i++) {
ans[i] = ;
int nowA = , nowB = ;
for (int j = ; j >= ; j--) {
if (A.num[A.tree[nowA][]] && B.num[B.tree[nowB][]]) {
nowA = A.tree[nowA][], nowB = B.tree[nowB][];
A.num[nowA]--, B.num[nowB]--;
}
else if (A.num[A.tree[nowA][]] && B.num[B.tree[nowB][]]) {
nowA = A.tree[nowA][], nowB = B.tree[nowB][];
A.num[nowA]--, B.num[nowB]--;
}
else if (A.num[A.tree[nowA][]] && B.num[B.tree[nowB][]]) {
nowA = A.tree[nowA][], nowB = B.tree[nowB][];
A.num[nowA]--, B.num[nowB]--;
ans[i] += ( << j);
}
else if (A.num[A.tree[nowA][]] && B.num[B.tree[nowB][]]) {
nowA = A.tree[nowA][], nowB = B.tree[nowB][];
A.num[nowA]--, B.num[nowB]--;
ans[i] += ( << j);
}
}
}
}
int main() {
int t;
scanf("%d", &t);
while (t--) {
int n, x;
A.init(), B.init();
scanf("%d", &n);
for (int i = ; i <= n; i++)
scanf("%d", &x), A.insert(x);
for (int i = ; i <= n; i++)
scanf("%d", &x), B.insert(x);
slove(n);
sort(ans + , ans + + n);
for (int i = ; i <= n; i++)
printf("%d%c", ans[i], i == n ? '\n' : ' ');
} }
[2019杭电多校第五场][hdu6625]three arrays(01字典树)的更多相关文章
- [2019杭电多校第五场][hdu6630]permutation 2
		
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6630 题意为求出1-n,n个数的全排列中有多少种方案满足第一位为x,第n位为y,且相邻数字绝对值之差不 ...
 - [2019杭电多校第五场][hdu6624]fraction
		
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6624 题意为求最小的b满足$a*b^{-1}\equiv x(modp)$. 把式子化简一下: $a\ ...
 - [2019杭电多校第五场][hdu6629]string matching(扩展kmp)
		
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6629 题意求字符串的每个后缀与原串的最长公共前缀之和. 比赛时搞东搞西的,还搞了个后缀数组...队友一 ...
 - [2019杭电多校第五场][hdu6628]permutation 1
		
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6628 题意为求字典序第k小的差异数组,差异数组p满足p[i]=a[i+1]-a[i]. 头铁的爆搜,因 ...
 - 2019杭电多校第五场 discrete logarithm problem
		
https://vjudge.net/contest/317493#problem/I
 - [2019杭电多校第三场][hdu6609]Find the answer(线段树)
		
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6609 大致题意是求出每个位置i最小需要将几个位置j变为0(j<i),使得$\sum_{j=1}^ ...
 - [2019杭电多校第三场][hdu6606]Distribution of books(线段树&&dp)
		
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6606 题意为在n个数中选m(自选)个数,然后把m个数分成k块,使得每块数字之和最大的最小. 求数字和最 ...
 - 2019杭电多校第三场hdu6609 Find the answer(线段树)
		
Find the answer 题目传送门 解题思路 要想变0的个数最少,显然是优先把大的变成0.所以离散化,建立一颗权值线段树,维护区间和与区间元素数量,假设至少减去k才能满足条件,查询大于等于k的 ...
 - 2018杭电多校第五场1002(暴力DFS【数位】,剪枝)
		
//never use translation#include<bits/stdc++.h>using namespace std;int k;char a[20];//储存每个数的数值i ...
 
随机推荐
- linux  find 用法和常见用例
			
Linux中find常见用法示例 ·find path -option [ -print ] [ -exec -ok command ] {} \; 本人qq群也有许多 ...
 - Store generated project files externally
			
最近项目要从.net转java了,之前java语言就就用过,本着熟悉回顾的想法,决定自己用maven搭建一个基础的ssm框架,一些搭建完毕,程序也能正常运行了.最后对比了别人搭建好的源码,发现他们im ...
 - 【UOJ#349】[WC2018] 即时战略
			
题目链接 题意 一开始已知一号点. 每次可以选定一个已知点和一个未知点,然后交互库会返回从已知点出发到达未知点路径上的第二个点. 要求在有限步之内知道每一个点. 次数要求: 链的情况要求 \(O(n) ...
 - H5 FileReader对象
			
前言:FileReader是一种异步文件读取机制,结合input:file可以很方便的读取本地文件. input:file 在介绍FileReader之前,先简单介绍input的file类型. < ...
 - kali安装docker以及配置阿里云镜像加速
			
1.需求 最近需要用到docker比较多,遂安装使用下,第一次用docker搭建测试环境,不得不说,docker真香.期间遇到了比较多奇奇怪怪的问题,网上的教程也比较多比较乱,遂记录一下. 2.安装d ...
 - 关于ADM和高维空间下距离度量的问题
			
最近聆听了两个IEEE FELLOW的高论.周末北大林老师来学校做了个报告,讲了很多新的机器学习概念.但是本人更关注的低秩学习,林老师只字未提.虽然如此,林老师的论文最近还是深入研究了很多,有多少改进 ...
 - Linux GDB 程序调试工具使用详解
			
转自 http://www.codeceo.com/article/linux-gdb-tools.html 整理的挺全的 GDB概述 GDB是GNU开源组织发布的一个强大的UNIX下的程序调试 ...
 - java浅克隆和深克隆,序列化和反序列化实现深克隆(封装序列化和反序列化操作)
			
本篇博客内容: 一.浅克隆(ShallowClone)和深克隆(DeepClone) 二.序列化和反序列化实现深克隆 三.封装序列化和反序列化操作 ObjectOutputStream + 内存流By ...
 - luogu 5468 [NOI2019]回家路线 最短路/暴力
			
想写一个 70 pts 算法,结果数据水,直接就切了 最短路: // luogu-judger-enable-o2 #include<bits/stdc++.h> using namesp ...
 - 手写CSS+js实现radio单选按钮
			
有的时候我们需要用长得漂亮一点的单选按钮,那么,就要抛弃原有的自己来写,下面就是我实现的 <div class="radio"><span class=" ...