hdu4825(Trie树+位运算)
来源:互联网 发布:淘宝客采集群怎么盈利 编辑:程序博客网 时间:2024/06/05 04:33
链接:点击打开链接
题意:给出n个数和m次询问,每次询问给出一个数x,问在n个数中哪个数与x异或值最大
代码:
#include <queue>#include <vector>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <iostream>#include <algorithm>using namespace std;int rt,a[1000005],v[3500005],s[3500005][2];void in(int x,int id){ int i,u,op; u=0; for(i=31;i>=0;i--){ op=((x&(1<<i))!=0); if(s[u][op]==0) s[u][op]=rt++; u=s[u][op]; } v[u]=id;}int get(int x){ int i,u,op; u=0; for(i=31;i>=0;i--){ op=((x&(1<<i))!=0); if(s[u][op^1]!=0) //尽可能走与当前位不同的点 u=s[u][op^1]; else u=s[u][op]; } return a[v[u]];}int main(){ //将每个数拆分成二进制从高位到低位插入到trie树中, int t,n,m,i,j,u,cas; //每次询问都尽可能保证走不同与当前位不同的点,就 scanf("%d",&t); //保证了异或值最大 for(cas=1;cas<=t;cas++){ scanf("%d%d",&n,&m); rt=1; memset(s,0,sizeof(s)); memset(v,0,sizeof(v)); for(i=1;i<=n;i++){ scanf("%d",&a[i]); in(a[i],i); } printf("Case #%d:\n",cas); for(i=1;i<=m;i++){ scanf("%d",&u); printf("%d\n",get(u)); } } return 0;}
阅读全文
0 0
- hdu4825(Trie树+位运算)
- Trie树 hdu4825 Xor Sum
- HDU4825 - Xor Sum(Trie 字典树)
- HDU4825 Xor Sum(Trie树 + 贪心)
- HDU4825 Xor Sum(Trie树,二进制)
- HDU4825 01trie+二进制
- hdu4825---Xor Sum(Trie + 贪心)
- hdu4825 Xor Sum【Trie、Xor】
- hdu4825 字典树 + 贪心
- hdu4825字典树
- hdu4825
- 【BZOJ4103】异或运算(THUSC2015)-可持久化trie树+位运算
- HDU4825 Xor Sum 字典树
- hdu4825 Xor Sum 【字典树】
- hdu4825 01字典树+贪心
- Trie树与位操作
- Trie(位运算)—— 计蒜客 XOR Queries
- 字典树(2)--hdu4825(字典树基本应用)
- DeepLearning(基于caffe)优化策略(2)--防拟合篇:Dropout
- 《学习正则表达式》读书笔记一
- iOS攻防
- 自制平衡小车:从入门到放弃——基于stm32的平衡小车系列(一)
- 操作系统基础知识-用户空间实现线程-内核实现线程
- hdu4825(Trie树+位运算)
- Flip Game
- 大数据-三
- 树莓派使用opencv时extension randr missing on display“:1”
- 最基础的urllib.request.urlopen()基本使用
- 商城项目基本介绍
- 两个整数相除
- 关于无线信号的RSSI和CSI的理解
- Android build(2) -- 走读build/core/main.mk