Xor Sum HDU - 4825(01字典树)

Xor Sum

HDU - 4825

(orz从之前从来没见过这种题

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 #define LL long long
 4 const int maxnode = 100010 * 32;
 5 const int sigma = 2;
 6 struct AC01{
 7     int ch[maxnode][sigma];
 8     LL val[maxnode];
 9     int sz;
10     void init(){
11         sz = 1;
12         val[0] = 0;
13         memset(ch[0], 0, sizeof(ch[0]));
14     }
15     void add(LL x){
16         int u = 0, n = 32;
17         for(int i = n; i >= 0; i--){
18             int c = (x >> i) & 1;
19             if(!ch[u][c]){
20                 memset(ch[sz], 0, sizeof(ch[sz]));
21                 val[sz] = 0;
22                 ch[u][c] = sz++;
23             }
24             u = ch[u][c];
25         }
26         val[u] = x;
27     }
28     //返回与x异或最大的值val[u];
29     LL query(LL x){
30         int u = 0, n = 32;
31         for(int i = n; i >= 0; i--){
32             int c = (x >> i) & 1;
33             if(ch[u][c ^ 1]) u = ch[u][c ^ 1];
34             else u = ch[u][c];
35         }
36         return val[u];
37     }
38 }ac;
39 int main(){
40     int t, kase = 0;
41     //freopen("in.txt", "r", stdin);
42     scanf("%d", &t);
43     while(t--){
44         ac.init();
45         int n, q;
46         scanf("%d %d", &n, &q);
47         for(int i = 0; i < n; i++) {
48             LL x;
49             scanf("%lld", &x);
50             ac.add(x);
51         }
52         printf("Case #%d:\n", ++kase);
53         while(q--){
54             LL x;
55             scanf("%lld", &x);
56             LL temp = ac.query(x);
57             printf("%lld\n", temp);
58         }
59     }
60 }

时间: 2024-10-31 09:04:05

Xor Sum HDU - 4825(01字典树)的相关文章

[HDU] 4825 (01字典树)

Problem Description Zeus 和 Prometheus 做了一个游戏,Prometheus 给 Zeus 一个集合,集合中包含了N个正整数,随后 Prometheus 将向 Zeus 发起M次询问,每次询问中包含一个正整数 S ,之后 Zeus 需要在集合当中找出一个正整数 K ,使得 K 与 S 的异或结果最大.Prometheus 为了让 Zeus 看到人类的伟大,随即同意 Zeus 可以向人类求助.你能证明人类的智慧么? Input 输入包含若干组测试数据,每组测试数据

HDU 4825 Xor Sum(经典01字典树+贪心)

Xor Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 132768/132768 K (Java/Others) Total Submission(s): 1555    Accepted Submission(s): 657 Problem Description Zeus 和 Prometheus 做了一个游戏,Prometheus 给 Zeus 一个集合,集合中包含了N个正整数,随后 Prometheus 将向 Ze

HDU 4825 Xor Sum(二进制的字典树,数组模拟)

题目 //居然可以用字典树...//用cin,cout等输入输出会超时 //这是从别处复制来的 #include<cstdio> #include<algorithm> #include<cstring> using namespace std; int node[3011111][2]; int tag,m,n,cas=0,T; long long one[64],allone,tmp; //0/1树的加数据操作,增加一个32的数 //其中如果当前位是0,则加左儿子,

字典树 &amp;&amp; 例题 Xor Sum HDU - 4825 (板子)

一.字典树描述:Trie树,即字典树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种.典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计.它的优点是:最大限度地减少无谓的字符串比较,查询效率比哈希表高. Trie的核心思想是空间换时间.利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的.它有3个基本性质: 1.根节点不包含字符,除根节点外每一个节点都只包含一个字符.2.从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字

Xor Sum HDU - 4825(01字典序板题)

#include <iostream> #include <cstdio> #include <sstream> #include <cstring> #include <map> #include <set> #include <vector> #include <stack> #include <queue> #include <algorithm> #include <cma

HDU 4825 Xor Sum(01字典树入门题)

http://acm.hdu.edu.cn/showproblem.php?pid=4825 题意: 给出一些数,然后给出多个询问,每个询问要从之前给出的数中选择异或起来后值最大的数. 思路:将给出的数建立01字典树,从高位开始建树.对于每个询问,如果当前位置值为0,那么在字典树中,如果有1的值,那么就优先走1,否则再走0. 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 using names

HDU - 4825 Xor Sum(01字典树)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4825 题目: Problem Description Zeus 和 Prometheus 做了一个游戏,Prometheus 给 Zeus 一个集合,集合中包含了N个正整数,随后 Prometheus 将向 Zeus 发起M次询问,每次询问中包含一个正整数 S ,之后 Zeus 需要在集合当中找出一个正整数 K ,使得 K 与 S 的异或结果最大.Prometheus 为了让 Zeus 看到人类的伟

HDU 4825 Xor Sum 【01字典树】

题面: Problem Description Zeus 和 Prometheus 做了一个游戏,Prometheus 给 Zeus 一个集合,集合中包含了N个正整数,随后 Prometheus 将向 Zeus 发起M次询问,每次询问中包含一个正整数 S ,之后 Zeus 需要在集合当中找出一个正整数 K ,使得 K 与 S 的异或结果最大.Prometheus 为了让 Zeus 看到人类的伟大,随即同意 Zeus 可以向人类求助.你能证明人类的智慧么? Input 输入包含若干组测试数据,每组

2014百度之星资格赛—— Xor Sum(01字典树)

Xor Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 132768/132768 K (Java/Others) Total Submission(s): 0    Accepted Submission(s): 0 Problem Description Zeus 和 Prometheus 做了一个游戏,Prometheus 给 Zeus 一个集合,集合中包含了N个正整数,随后 Prometheus 将向 Zeus 发起