zoukankan      html  css  js  c++  java
  • 求两个数异或最大值

    题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=98837#problem/I

    题意:给定一些数,求这些数中异或值最大的值

    分析:每个数都可以写成二进制,可以建立一颗字典树

    #include<bits/stdc++.h>
    
    using namespace std;
    
    #define INF 0x3f3f3f3f
    
    const int N = 100000<<5;  
      
    struct Trie {  
        int a[2];  
        int num;  
    } f[N];  
      
    int cnt, ans;  
      
    // insert x into the root which id is u, the deep is num  
    void insert(int x, int u, int num) 
    {  
        bool k;  
        for (int i = num; i >= 0; i--) 
        {  
            k = (1<<i)&x;  
            if (f[u].a[k] == -1)  
                f[u].a[k] = ++cnt;  
            u = f[u].a[k];  
        }  
        f[u].num = x;  
    }  
      
    // query xor  
    void query(int x, int u, int num) 
    {  
        bool k;  
        for (int i = num; i >= 0; i--) 
        {  
            k = (1<<i)&x;  
            if (f[u].a[!k] != -1)  
                u = f[u].a[!k];  
            else  
                u = f[u].a[k];  
        }  
        ans = max(ans, f[u].num^x);  
    }  
      
    int main() 
    {  
        int n, t;  
        while(scanf("%d", &n)!=EOF) 
        {  
            memset(f, -1, sizeof(Trie) * N);  
            cnt = 0;  
            ans = 0;  
            while (n--) 
            {  
                scanf("%d", &t);  
                insert(t, 0, 31);  
                query(t, 0, 31);  
            }  
            printf("%d
    ", ans);  
        }  
        return 0;  
    }  
    anytime you feel the pain.hey,refrain.don't carry the world upon your shoulders
  • 相关阅读:
    .editorconfig
    每日日报
    每日日报
    每日日报
    每日日报
    每日日报
    《大道至简》读后感
    每日日报
    每日日报
    每日日报
  • 原文地址:https://www.cnblogs.com/gaoss/p/4954913.html
Copyright © 2011-2022 走看看