• 中南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 }
  • 相关阅读:
    【alpha】Scrum站立会议第2次....10.17
    【alpha】Scrum站立会议第1次····10.16
    【week4】技术随笔psp
    【week4】课堂Scrum站立会议
    【week3】psp (技术随笔)
    【week3】四则运算 单元测试
    【week3】词频统计 单元测试
    Oracle Split字符串

    指针函数与指针数组
  • 原文地址:https://www.cnblogs.com/tom987690183/p/3408147.html
Copyright © 2020-2023  润新知