The Xor Largest Pair(Trie)
唔~~~~首先,必须先知道这得用Trie做
Xor不是相同的为0,不同的为1吗?此时我要求出答案最大,那么就是要在保证数位最大的情况下使选出的两个数不同位最多喽~~~
可以弄一个get函数用来查询,只需每次查询时将每一位变一下就可以啦
1 #include<cstdio> 2 #include<iostream> 3 #include<cmath> 4 #include<cstring> 5 #include<algorithm> 6 #include<cstdlib> 7 using namespace std; 8 int ch[400005<<5][2],tot=0,n,a[400005]; 9 void insert(int x) 10 { 11 int p=0; 12 for(int i=31; i>=0; i--){ 13 int c=(x>>i)&1; 14 if (!ch[p][c]) ch[p][c]=++tot; 15 p=ch[p][c]; 16 } 17 } 18 int get(int x) 19 { 20 int p=0,v=0,ans=0; 21 for(int i=31; i>=0; i--){ 22 int c=(x>>i)&1; 23 int o; if (c) o=0; else o=1; 24 if (ch[v][o]) v=ch[v][o],ans=(ans<<1)|1; 25 else v=ch[v][c],ans<<=1; 26 p=ch[p][c]; 27 } 28 return ans; 29 } 30 int main() 31 { 32 scanf("%d",&n); int ans=0; 33 for(int i=1; i<=n; i++) scanf("%d",&a[i]),insert(a[i]); 34 for(int i=1; i<=n; i++) ans=max(ans,get(a[i])); 35 printf("%d\n",ans); 36 return 0; 37 }
miao~~~