T192901 智乃的异或
某位师兄出的题
也可当01trie模板用
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<map> #include<algorithm> #include<queue> #define INF 0x3f3f3f3f using namespace std; int tree[10000001][2],cnt=0; int Min(int XX,int YY){ if(XX<YY) return XX; return YY; } int add(int zx,int x,int p){ if(p==0) return 0; if((x&(1<<(p-1)))==0){ if(tree[zx][0]==0) tree[zx][0]=++cnt; add(tree[zx][0],x,p-1); } else{ if(tree[zx][1]==0) tree[zx][1]=++cnt; add(tree[zx][1],x,p-1); } return 0; } int cx(int ws,int hh){ if(tree[ws][0]==0&&tree[ws][1]==0) return 0; if(tree[ws][0]!=0&&tree[ws][1]==0) return cx(tree[ws][0],hh-1); if(tree[ws][0]==0&&tree[ws][1]!=0) return cx(tree[ws][1],hh-1); if(tree[ws][0]!=0&&tree[ws][1]!=0){ int zc=Min(cx(tree[ws][0],hh-1),cx(tree[ws][1],hh-1)); return (1<<(hh-1))+zc; } } int main(){ int minn=INF,n,a[1000001]; scanf("%d",&n); cnt=1; for(int i=1;i<=n;i++){ scanf("%d",&a[i]); add(1,a[i],30); } cout<<cx(1,30); return 0; }

浙公网安备 33010602011771号