hdu4825 01字典树+贪心
来源:互联网 发布:centos双系统安装教程 编辑:程序博客网 时间:2024/05/19 03:21
从高位向低位构造字典树,因为高位得到的数更大。
AC代码:
#include<cstdio>using namespace std;typedef long long LL;const int maxn=2;struct node{node *next[maxn];node(){next[0]=next[1]=NULL;}}*root;LL w[50];void deal(){w[0]=1;for(int i=1;i<=36;++i) w[i]=w[i-1]*2;}void Init(){ root = new node();}void insert_tree(LL num){node *p=root,*q;for(int i=32;i>=0;--i){LL h=num&w[i];int u=0;if(h!=0) u=1;if(p->next[u]==NULL){q=new node();p->next[u]=q;p=p->next[u];}else {p=p->next[u];}}}LL getAns(LL num,node *u,int lev){if(lev<0||u==NULL) return 0;LL ans=0;int h=num&w[lev];if(h!=0) h=1;h=1-h; //xorif(u->next[h]==NULL) ans+=(1-h)*w[lev]+getAns(num,u->next[1-h],lev-1); else ans+=h*w[lev]+getAns(num,u->next[h],lev+-1); return ans;}void free_tree(node *u){ //释放内存 if(u==NULL) return;free_tree(u->next[0]);free_tree(u->next[1]);delete u;}int main(){deal();int T,n,m,kase=1;LL x;scanf("%d",&T);while(T--){Init();scanf("%d%d",&n,&m);for(int i=0;i<n;++i) {scanf("%lld",&x);insert_tree(x);}printf("Case #%d:\n",kase++);LL S;for(int i=0;i<m;++i){scanf("%lld",&S);printf("%lld\n",getAns(S,root,32));}free_tree(root);}return 0;}
如有不当之处欢迎指出!
0 0
- hdu4825 01字典树+贪心
- hdu4825 字典树 + 贪心
- hdu4825-01字典树&&贪心&&经典&&异或最大-Xor Sum
- hdu4825字典树
- HDU4825 Xor Sum 字典树
- hdu4825 Xor Sum 【字典树】
- HDU4825 - Xor Sum(Trie 字典树)
- HDU4825 Xor Sum(Trie树 + 贪心)
- 字典树(2)--hdu4825(字典树基本应用)
- hdu4825 Xor Sum 字典树与异或(经典)
- hdu4825---Xor Sum(Trie + 贪心)
- HDU4825 01trie+二进制
- hdu4825
- HDU4825 Xor Sum 0-1字典树 最大异或和
- 01字典树+贪心(顺便总结字典树模板)
- Trie树 hdu4825 Xor Sum
- hdu4825(Trie树+位运算)
- HDU 4825:Xor Sum(01字典树+贪心)
- 设计模式练习(7)——桥接模式
- 关于引用的那些事
- Intellij IDEA Tomcat vm option 设置
- NIM游戏与SG函数
- 将html导出word
- hdu4825 01字典树+贪心
- Android音视频学习第3章:音视频同步实现视频播放器
- 微信小程序 - 实现一个移动端小商城
- 我学——同步和互斥
- 一种简单的加密算法
- Swift3.0编译动态Framework
- [C++] 基础知识之2、C++中的基本数据类型
- array_merge
- 学习资源整理