hdu 4825 && acdream 1063 01字典树异或问题
题意:
给一个集合,多次询问,每次给一个k,问你集合和k异或结果最大的哪个
题解:
经典的01字典树问题,学习一哈.
把一个数字看成32位的01串,然后查找异或的时候不断的沿着^为1的路向下走即可
#include <bits/stdc++.h>
#define endl '\n'
#define IO ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
#define rep(ii,a,b) for(int ii=a;ii<=b;++ii)
using namespace std;
const int maxn=1e5+10,maxm=2e6+10;
int casn,n,m,k,num[maxn];
struct Trie{
int next[maxn*32][2],size;
ll val[maxn*32];
void init(){
size=0;
memset(next,0,sizeof next);
memset(val,0,sizeof val);
}
void insert(ll x){
int cur=0;
for(int i=32;i>=0;i--){
int k=(x>>i)&1;
if(!next[cur][k]) next[cur][k]=++size;
cur=next[cur][k];
}
val[cur]=x;
}
ll find(ll x){
int cur=0;
for(int i=32;i>=0;i--){
int k=(x>>i)&1;
if(next[cur][k^1])cur=next[cur][k^1];
else cur=next[cur][k];
}
return val[cur];
}
}trie;
string s[maxn]; int main() {
IO;
cin>>casn;
int __=0;
while(casn--){
cin>>n>>m;
trie.init();
cout<<"Case #"<<++__<<":"<<endl;
while(n--){
ll x;
cin>>x;
trie.insert(x);
}
while(m--){
ll x;
cin>>x;
cout<<trie.find(x)<<endl;
}
}
return 0;
}
acdream 1063 代码
#include <bits/stdc++.h>
#define endl '\n'
#define ll long long
#define IO ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
#define rep(ii,a,b) for(int ii=a;ii<=b;++ii)
using namespace std;
const int maxn=1e5+10,maxm=2e6+10;
int casn,n,m,k,num[maxn];
struct Trie{
int next[maxn*32][2],size;
ll val[maxn*32];
void init(){
size=0;
memset(next,0,sizeof next);
memset(val,0,sizeof val);
}
void insert(ll x){
int cur=0;
for(int i=32;i>=0;i--){
int k=(x>>i)&1;
if(!next[cur][k]) next[cur][k]=++size;
cur=next[cur][k];
}
val[cur]=x;
}
ll find(ll x,bool flag){
int cur=0;
for(int i=32;i>=0;i--){
int k=(x>>i)&1;
if(flag){
if(next[cur][k^1]) cur=next[cur][k^1];
else cur=next[cur][k];
}else {
if(next[cur][k])cur=next[cur][k];
else cur=next[cur][k^1];
}
}
return val[cur];
}
}trie; int main() {
IO;
cin>>casn;
while(casn--){
cin>>n;
trie.init();
while(n--){
ll x;
string s;
cin>>s>>x;
if(s=="insert") trie.insert(x);
else if(s=="qmin") cout<<(x^trie.find(x,0))<<endl;
else cout<<(x^trie.find(x,1))<<endl;
}
}
return 0;
}
hdu 4825 && acdream 1063 01字典树异或问题的更多相关文章
- HDU 4825 Xor Sum(字典树)
嗯... 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4825 这道题更明确的说是一道01字典树,如果ch[u][id^1]有值,那么就向下继续查找/ ...
- [BZOJ4260] Codechef REBXOR (01字典树,异或前缀和)
Description Input 输入数据的第一行包含一个整数N,表示数组中的元素个数. 第二行包含N个整数A1,A2,-,AN. Output 输出一行包含给定表达式可能的最大值. Sample ...
- P4551 最长异或路径 (01字典树,异或前缀和)
题目描述 给定一棵 n 个点的带权树,结点下标从 1 开始到 N .寻找树中找两个结点,求最长的异或路径. 异或路径指的是指两个结点之间唯一路径上的所有边权的异或. 输入输出格式 输入格式: 第一行一 ...
- HDU 4825 Xor Sum(01字典树入门题)
http://acm.hdu.edu.cn/showproblem.php?pid=4825 题意: 给出一些数,然后给出多个询问,每个询问要从之前给出的数中选择异或起来后值最大的数. 思路:将给出的 ...
- hdu 4825 Xor Sum(01字典树模版题)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4825 题解:一到01字典树的模版题,01字典树就是就是将一些树用二进制放到一个树上这样可以方便对整体异 ...
- HDU 4825 Xor Sum (模板题)【01字典树】
<题目链接> 题目大意: 给定n个数,进行m次查找,每次查找输出n个数中与给定数异或结果最大的数. 解题分析: 01字典树模板题,01字典树在求解异或问题上十分高效.利用给定数据的二进制数 ...
- Chip Factory---hdu5536(异或值最大,01字典树)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5536 题意:有一个数组a[], 包含n个数,从n个数中找到三个数使得 (a[i]+a[j])⊕a[k] ...
- BZOJ 4260 Codechef REBXOR (区间异或和最值) (01字典树+DP)
<题目链接> 题目大意:给定一个序列,现在求出两段不相交的区间异或和的最大值. 解题分析: 区间异或问题首先想到01字典树.利用前缀.后缀建树,并且利用异或的性质,相同的两个数异或变成0, ...
- HDU 6191 2017ACM/ICPC广西邀请赛 J Query on A Tree 可持久化01字典树+dfs序
题意 给一颗\(n\)个节点的带点权的树,以\(1\)为根节点,\(q\)次询问,每次询问给出2个数\(u\),\(x\),求\(u\)的子树中的点上的值与\(x\)异或的值最大为多少 分析 先dfs ...
随机推荐
- Linux记录-salt命令
salt '*id*' test.ping salt -N 组名 cmd.run '' salt -G "ipv4:0.0.0.0" cmd.run '' salt '*i ...
- Web API中的路由(二)——属性路由
一.属性路由的概念 路由让webapi将一个uri匹配到对应的action,Web API 2支持一种新类型的路由:属性路由.顾名思义,属性路由使用属性来定义路由.通过属性路由,我们可以更好地控制We ...
- sql递归查询 根据Id查所有子结点
Declare @Id Int Set @Id = 0; ---在此修改父节点 With RootNodeCTE(D_ID,D_FatherID,D_Name,lv) As ( Select D_ID ...
- 清理sql2012数据库日志
--1.先把数据库设置为简单模式(右击数据库名->点'属性'->点'选项'->恢复模式改成'简单'->点'确定'按钮,--2.再执行下面的语句(或者右击数据库点'任务'-> ...
- 极光推送API
https://github.com/jpush/jpush-api-ruby-client/blob/master/docs/Guides.md#%E6%9B%B4%E6%96%B0%E8%AE%B ...
- AJAX工作原理与缺点
1.概念:什么是AJAXAJAX全称为“Asynchronous JavaScript and XML”(异步JavaScript和XML),是一种创建交互式网页应用的网页开发技术.2.为什么要使用他 ...
- ArcGis Python脚本——ArcGIS 中使用的 Python 是什么版本
Python 编程语言用于自 9.0 起的各版本 ArcGIS 中,并被整合到 ArcMap 和 ArcGIS for Server 的自动安装中. ArcGIS 将在完整安装过程中安装下列 Pyth ...
- vue-router导航钩子
Vue路由中的导航钩子,可以用来拦截导航,让它完成跳转. 全局导航钩子 当一个导航触发时,全局的 before 钩子按照创建顺序调用.钩子是异步解析执行,此时导航在所有钩子 resolve 完之前一直 ...
- Android几个比较有用的插件
1.Android Drawable Importer 2.Android ButterKnife Zelezny 使用方法,在SetContentView上右键,Generate 3.Androi ...
- 基于DSP的IS95正向业务信道模块设计
**定时20ms循环处理话音数据包*** *伪指令不占空间不影响执行速度,只是定义和描述但对汇编链接有重要指示作用 ********************************* .title & ...