zoukankan      html  css  js  c++  java
  • 中南oj 1216: 异或最大值 数据结构

    1216: 异或最大值

    Time Limit: 2 Sec  Memory Limit: 128 MB Submit: 98  Solved: 29 [Submit][Status][Web Board]

    Description

    给定一些数,求这些数中两个数的异或值最大的那个值

    Input

    第一行为数字个数n,1 <= n <= 10 ^ 5。接下来n行每行一个32位有符号非负整数。

    Output

    任意两数最大异或值

    Sample Input

    3
    3
    7
    9

    Sample Output

    14

    HINT

    这道题,我学到了一些新的知识。

    没有写过字典树。这题用01字典树。

    构建树,和树形dp是一样的,都是树。

    思路:

      暴力会超时。

      用字典树,01字典树。

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 #include<string.h>
     4 
     5 typedef struct
     6 {
     7     int a[2];
     8     int num;
     9 }Tril;
    10 Tril f[100010<<5];
    11 int root,ans;
    12 
    13 void insert(int x,int u,int num)
    14 {
    15     int i,k;
    16     for(i=num;i>=0;i--)
    17     {
    18         k=(1<<i&x)?1:0;
    19         if(f[u].a[k]==-1)
    20             f[u].a[k]=root++;
    21         u=f[u].a[k];
    22     }
    23     f[u].num=x;
    24 }
    25 void query(int x,int u,int num)
    26 {
    27     int i,j,k;
    28     for(i=num;i>=0;i--)
    29     {
    30         k=(1<<i&x)?0:1;
    31         if(f[u].a[k]!=-1)
    32             u=f[u].a[k];
    33         else
    34             u=f[u].a[k^1];
    35     }
    36     j=f[u].num^x;
    37     if(j>ans)
    38         ans=j;
    39 }
    40 int main()
    41 {
    42     int n,i,x;
    43     while(scanf("%d",&n)>0)
    44     {
    45         memset(f,-1,sizeof(Tril)*((n+1)<<5));
    46         ans=0;
    47         root=1;
    48         for(i=1;i<=n;i++)
    49         {
    50             scanf("%d",&x);
    51             insert(x,0,31);
    52              query(x,0,31);
    53         }
    54         printf("%d
    ",ans);
    55     }
    56     return 0;
    57 }
  • 相关阅读:
    坐标转换convertRect
    error this is not a media message!!!
    嵌入式-第一季-第4课
    嵌入式-第一季-第2课
    嵌入式-第一季-第3课
    嵌入式-第一季-第1课
    web-15. 事件与函数
    web-14. 表达式与程序流程
    web-13. 数组和字符串
    数据-第5课-线性表的本质
  • 原文地址:https://www.cnblogs.com/tom987690183/p/3408147.html
Copyright © 2011-2022 走看看