题目链接: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' : ' ');
} }

最新文章

  1. HDOJ 1051. Wooden Sticks 贪心 结构体排序
  2. 用批处理启动MySQL命令行工具
  3. mysql登录基本语句
  4. 【转】C++11常用特性的使用经验总结
  5. NeHe OpenGL教程 第三十九课:物理模拟
  6. SaaS系列介绍之十四: SaaS软件开发分析
  7. 针对上一篇文章中的代码,想出的重构方案(python实现)
  8. 轻量级交互数据json格式初探
  9. 控制台console使用MFC库函数,Cout输出CString的方法
  10. Einbahnstrasse
  11. Mysql SQL Mode详解
  12. __call__
  13. C#项目中关于多个程序集下App.config文件的问题
  14. day19 反射
  15. java程序员如何编写更好的单元测试的7个技巧
  16. 压力测试工具JMeter入门教程&lt;转&gt;
  17. SpringMVC 使用 RESTful 架构实现 CRUD 操作
  18. 深度学习(一) BP神经网络
  19. 017.1 stringBuffer
  20. 国内外三个领域巨头告诉你Redis怎么用

热门文章

  1. “HTTP 错误 404.15 - Not Found 请求筛选模块被配置为拒绝包含的查询字符串过长的请求”之解决办法
  2. NOIP模拟赛(by hzwer) T1 小奇挖矿
  3. mysql——批量插入数据
  4. java——逻辑运算符与(&amp;和&amp;&amp;)或(|和||)
  5. Linux内核设计与实现 总结笔记(第十五章)进程地址空间
  6. POJ 3691 DNA repair ( Trie图 &amp;&amp; DP )
  7. 在Python中,如何将一个字符串数组转换成整型数组
  8. Kohana重写接收不到get参数问题
  9. 【CF1249D】Too Many Segments(贪心,set,vector)
  10. 洛谷P1982 小朋友的数字——题解