乙個字典樹與異或運算的集合。當時寫超時了,不知道為什麼。。。先記錄下來
題目:zeus 和 prometheus 做了乙個遊戲,prometheus 給 zeus 乙個集合,集合中包含了n個正整數,隨後 prometheus 將向 zeus 發起m次詢問,每次詢問中包含乙個正整數 s ,之後 zeus 需要在集合當中找出乙個正整數 k ,使得 k 與 s 的異或結果最大。prometheus 為了讓 zeus 看到人類的偉大,隨即同意 zeus 可以向人類求助。你能證明人類的智慧型麼?
input輸入包含若干組測試資料,每組測試資料報含若干行。
輸入的第一行是乙個整數t(t < 10),表示共有t組資料。
每組資料的第一行輸入兩個正整數n,m(<1=n,m<=100000),接下來一行,包含n個正整數,代表 zeus 的獲得的集合,之後m行,每行乙個正整數s,代表 prometheus 詢問的正整數。所有正整數均不超過2^32。output對於每組資料,首先需要輸出單獨一行」case #?:」,其中問號處應填入當前的資料組數,組數從1開始計算。
對於每個詢問,輸出乙個正整數k,使得k與s異或值最大。
2
3 23 4 515
4 14 6 5 6
3
case #1:43
case #2:
4
[提交][狀態]
#include#include#include#includeusing namespace std;
#define ll long long
const int maxn = 1e5+5;
const int inf = 0x3f3f3f3f;
int pre[maxn][40];
int arr[maxn];
int len;
int tree[maxn*100][2];
int ans[50];
void init()
void fun(int x)
int k = len;
while(!que.empty())}
int rt = 1;
void build(int x)
}int pp[50];
int an;
void query()}
int main()
len = floor(log(ma)/log(2))+1;
memset(pre, 0, sizeof(pre));
memset(tree, 0, sizeof(tree));
rt = 1;
for(int i = 1; i <= n; i++)
printf("case #%d:\n", kase++);
while(m--)
if (lenth >= len)
}else
}for(int i = 1; i <= len; i++) pp[i] ^= 1;
query();
printf("%d\n", an);}}
return 0;}
超時**
#include using namespace std;
#define max 2
typedef struct trietrie;
trie *root = new trie();
void creattrie(int *str,int m) //建立字典樹的過程,
else
for (int j=0;jnext[j]=null;
}c_root->next[id]=p;
c_root=c_root->next[id];
} else
} }
void binarycout(int m,int n) //求32位的二進位制,並儲存在乙個陣列裡
}
int findtrielocation(int *str) //
else
}
else
else
} } return f_root->v;}
int main()
cin>>t;
int flag=1;
while(t--)
for (int j=0;j>a[j];
} for (int j=0;j這裡有乙個比較知識點,將乙個十進位制數轉化為二進位制數存進陣列裡
void binarycout(int m,int n) //求32位的二進位制,並儲存在乙個陣列裡
}
有時間在研究一下! 最大異或對 字典樹
在給定的n個整數a1,a2 an中選出兩個進行xor 異或 運算,得到的結果最大是多少?輸入格式 第一行輸入乙個整數n。第二行輸入n個整數a1 an。輸出格式 輸出乙個整數表示答案。資料範圍 1 n 105,0 ai 231 輸入樣例 31 2 3 輸出樣例 3 基於貪心的思想 異或是一種不進製加法...
字典樹 最大異或對
分析程式 最大異或對,就是給出一堆數,然後在這一堆數中選擇兩個數,使得異或後結果最大。所涉及到的知識點有 字典樹,二進位制的思想 這樣寫不出意外是會超時的,因為這樣看的話,他的時間複雜度是o n n 然後題中給出的資料是10的五次方。所以說這樣的話,需要執行10的十次方次操作,而機器在一秒中只能執行...
最大異或對 字典樹)
143.最大異或對 在給定的n個整數a1,a2 an a1,a2 an 中選出兩個進行xor 異或 運算,得到的結果最大是多少?輸入格式 第一行輸入乙個整數n。第二行輸入n個整數a 1 a1 an an 輸出格式 輸出乙個整數表示答案。資料範圍1 n 105 1 n 10 5,0 ai 231 0 ...