2 条题解

  • 2
    @ 2022-8-28 11:37:23
    /*****************************************
    Note:
    ******************************************/
    #include <queue>
    #include <math.h>
    #include <stack>
    #include <stdio.h>
    #include <iostream>
    #include <vector>
    #include <iomanip>
    #include <string.h>
    #include <algorithm>
    using namespace std;
    #define LL long long
    const int N = 1e6 + 10;
    const int INF = 0x3f3f3f3f;
    int tr[N*2][2] , a[N] , idx;
    void add(int x)
    {
    	int len = 0;
    	for(int i = 30 ; ~i ; i-- )
    	{
    		int k = (x & (1 << i)) ? 1 : 0;
    		if(!tr[len][k])
    			tr[len][k] = ++idx;
    		len = tr[len][k];
    	}
    }
    int find(int x)
    {
    	int len = 0 , ans = 0;
    	for(int i = 30 ; ~i ; i-- )
    	{
    		int k = (x & (1 << i)) ? 0 : 1;
    		if(tr[len][k])
    		{
    			ans += (1 << i);
    			len = tr[len][k];
    		}
    		else 
    			len = tr[len][k^1];
    	}
    	return ans;
    }
    int main()
    {
    	int n;
    	cin >> n;
    	for(int i = 1 ; i <= n ;i ++)
    	{
    		cin >> a[i];
    		add(a[i]);
    	}
    	int maxx = 0;
    	for(int i = 1 ; i <= n ; i++)
    		maxx = max(maxx , find(a[i]) );
    	cout << maxx << endl;
    	return 0;
    }
    

    信息

    ID
    391
    时间
    1000ms
    内存
    512MiB
    难度
    6
    标签
    递交数
    60
    已通过
    19
    上传者