zoukankan      html  css  js  c++  java
  • HDU 4825 Xor Sum

    Xor Sum

    中文题意不解释。

    题解:就是开一个01字典树,从最高位开始, 尽可能的去找到当前位取反的值, 然后就可以找到结果。 结果怕每次初始化然后TLE, 手残写了一个垃圾优化, 然后疯狂WA 2333,最后还是初始化了。

    代码:

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 #define LL long long
     4 #define ULL unsigned LL
     5 #define fi first
     6 #define se second
     7 #define lson l,m,rt<<1
     8 #define rson m+1,r,rt<<1|1
     9 #define max3(a,b,c) max(a,max(b,c))
    10 #define min3(a,b,c) min(a,min(b,c))
    11 const int INF = 0x3f3f3f3f;
    12 const LL mod = 1e9+7;
    13 typedef pair<int,int> pll;
    14 const int N = 4000010;
    15 int tree[N][2];
    16 int tot = 2;
    17 void Insert(int tmp){
    18     int rt = 1;
    19     for(int i = 31; i >= 0; i--){
    20         int id = (tmp>>i)&1;
    21         if(tree[rt][id] == 0) tree[rt][id] = tot++;
    22         rt = tree[rt][id];
    23     }
    24 }
    25 int Find(int tmp){
    26     int rt = 1;
    27     int ret = 0;
    28     for(int i = 31; i >= 0; i--){
    29         int id = (tmp>>i)&1;
    30         if(tree[rt][!id] != 0) {
    31             rt = tree[rt][!id];
    32             ret += 1 << i;
    33 
    34         }
    35         else{
    36             rt = tree[rt][id];
    37         }
    38     }
    39     return ret^tmp;
    40 }
    41 int main(){
    42     int T, n, m, cas = 1;
    43     int tmp;
    44     scanf("%d", &T);
    45     while(T--){
    46         memset(tree, 0, sizeof(tree));
    47         scanf("%d%d",&n,&m);
    48         printf("Case #%d:
    ", cas++);
    49         tot = 2;
    50         for(int i = 1; i <= n; i++) {
    51             scanf("%d", &tmp);
    52             Insert(tmp);
    53         }
    54         for(int i = 1; i <= m; i++){
    55             scanf("%d", &tmp);
    56             printf("%d
    ",Find(tmp));
    57         }
    58     }
    59 
    60     return 0;
    61 }
    View Code
  • 相关阅读:
    Ubuntu安装deepin wine版QQ
    解决anaconda安装cvxpy失败的方法
    1006
    一种不用参数交换两变量值的方法
    输入三位数,翻转输出
    一个简单的问题
    1006ac(转)
    1007(转)
    杭电oj1004 自写成功代码
    1004
  • 原文地址:https://www.cnblogs.com/MingSD/p/8709915.html
Copyright © 2011-2022 走看看