1 条题解

  • 0
    @ 2024-3-5 18:33:30
    #include <bits/stdc++.h>
    using namespace std;
    const int maxn = 1e5 + 5;
    struct Node {
    	int s[2];
    } tr[maxn * 31];
    int n, a, idx, ans;
    void ins(int a) {
    	for (int u = 0, d = 30; d >= 0; d--) {
    		int x = (a >> d) & 1;
    		int &s = tr[u].s[x];
    		if (!s) s = ++idx;
    		u = s;
    	}
    }
    int cal(int a) {
    	int res = 0;
    	for (int u = 0, d = 30; d >= 0; d--) {
    		int x = (a >> d) & 1;
    		int s = tr[u].s[x], s2 = tr[u].s[x^1];
    		if (s2)
    			res += (1<<d), u = s2;
    		else
    			u = s;
    	}
    	return res;
    }
    int main() {
    	scanf("%d", &n);
    	for (int i = 0; i < n; i++) {
    		scanf("%d", &a);
    		if (i) ans = max(ans, cal(a));
    		ins(a);
    	}
    	printf("%d\n", ans);
    	return 0;
    }
    
    
    • 1

    信息

    ID
    52
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    2
    已通过
    2
    上传者