题目链接:HDU--4825 Xor Sum

mmp sb字典树因为数组开的不够大一直wa 不是报的 re!!! 找了一下午bug 草

把每个数转化成二进制存字典树里面 然后尽量取与x这个位置上不相同的

先来一个最原始的代码写的跟屎一样的

#include<iostream>
#include<cstring>
#include<algorithm>
#include<string.h>
#include<stdio.h>
#include<cmath>
#include<vector>
using namespace std;
#define maxn 100010
;
struct ac{
   ];
   void init(){
     sum=;fa=;
     memset(nex,,sizeof(nex));
   }
}tre[maxn*];
void add(char a[],long long ii){        // 在这里转化成字符串了
   ,j=,k=;
   while(a[i]){
       ';
       if(tre[k].nex[z]){
          j=tre[k].nex[z];
          tre[j].sum++;
       }else{
          tre[k].nex[z]=++tot;
          j=tot;
          tre[j].init();
          tre[j].sum++;
       }
       k=j;
       i++;
   }
   tre[k].fa=ii;
}
long long  query(char a[]){
   ,j=,k=;
   ;
   while(a[i]){
      ';
      ){
         ]){
            j=tre[k].nex[];
         }];
      }else{
         ]){
            j=tre[k].nex[];
         }];
      }
      k=j;
      i++;
   }
   return tre[k].fa;
}
;
void init(){
  tot=;cnt=;
  memset(tre,,sizeof(tre));
}
],b[];

int main(){
   ;
   scanf("%lld",&t);
   while(t--){
      init();
      long long  n,m;
      scanf("%lld%lld",&n,&m);
      ;j<n;j++){
         long long  x;
         scanf("%lld",&x);
         c[cnt++]=x;
         ;
         while(x){
            ;
            a[len++]=i+';
            x/=;
         }
         ;
         ;k<=;k++){
           -k)==z){
              b[k]=a[z];
              z--;
           }';
         }
         add(b,c[cnt-]);
      }
      printf("Case #%lld:\n",ant++);
      ;j<m;j++){
         long long  x;
         scanf("%lld",&x);
         long long  ii=x;
         ;
         while(x){
            ;
            a[len++]=i+';
            x/=;
         }
         ;
         ;k<=;k++){
           -k)==z){
              b[k]=a[z];
              z--;
           }';
         }
         long long i=query(b);
         printf("%lld\n",i);
      }
   }
}

改善过后舒心多了

#include<bits/stdc++.h>
using namespace std;
#define maxn 3000000+5
int a[maxn];
int tot;
struct ac{
   ];
   void init(){
     fa=-;memset(nex,-,sizeof(nex));
   }
}tre[maxn];
void add(int x,int y){
  ;
  ;j>=;j--){
     <<j)&x);
     ){
        tre[k].nex[z]=++tot;
        tre[tot].init();
     }
     k=tre[k].nex[z];
  }
  //cout<<k<<" "<<y<<endl;
  tre[k].fa=y;
}
int query(int x){
   ;
   ;j>=;j--){
      <<j)&x);
      ]!=-){
         k=tre[k].nex[z^];
      }
      else k=tre[k].nex[z];
   }
   return tre[k].fa;
}
void init(){
  memset(tre,,sizeof(tre));
  tot=;
  tre[].init();
}
int main(){
   ;
   cin>>t;
   while(t--){
      init();
      int n,m;
      scanf("%d%d",&n,&m);
      ;j<n;j++){
         int x;
         scanf("%d",&x);
         add(x,x);
      }
      printf("Case #%d:\n",ant++);
      ;j<m;j++){
         int x;
         scanf("%d",&x);
         printf("%d\n",query(x));
      }
   }
}

HDU--4825 Xor Sum (字典树)的更多相关文章

  1. HDU 4825 Xor Sum 字典树+位运算

    点击打开链接 Xor Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 132768/132768 K (Java/Others) ...

  2. hdu 4825 xor sum(字典树+位运算)

    Xor Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 132768/132768 K (Java/Others)Total S ...

  3. hdu 4825 Xor Sum trie树

    Xor Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 132768/132768 K (Java/Others) Proble ...

  4. hdu 4825 Xor Sum(trie+贪心)

    hdu 4825 Xor Sum(trie+贪心) 刚刚补了前天的CF的D题再做这题感觉轻松了许多.简直一个模子啊...跑树上异或x最大值.贪心地让某位的值与x对应位的值不同即可. #include ...

  5. HDU 4825 Xor Sum(经典01字典树+贪心)

    Xor Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 132768/132768 K (Java/Others) Total ...

  6. HDU 4825 Xor Sum(01字典树入门题)

    http://acm.hdu.edu.cn/showproblem.php?pid=4825 题意: 给出一些数,然后给出多个询问,每个询问要从之前给出的数中选择异或起来后值最大的数. 思路:将给出的 ...

  7. hdu 4825 Xor Sum(01字典树模版题)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4825 题解:一到01字典树的模版题,01字典树就是就是将一些树用二进制放到一个树上这样可以方便对整体异 ...

  8. HDU 4825 Xor Sum(字典树)

    嗯... 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4825 这道题更明确的说是一道01字典树,如果ch[u][id^1]有值,那么就向下继续查找/ ...

  9. HDU 4825 Xor Sum(二进制的字典树,数组模拟)

    题目 //居然可以用字典树...//用cin,cout等输入输出会超时 //这是从别处复制来的 #include<cstdio> #include<algorithm> #in ...

  10. HDU 4825 Xor Sum (模板题)【01字典树】

    <题目链接> 题目大意: 给定n个数,进行m次查找,每次查找输出n个数中与给定数异或结果最大的数. 解题分析: 01字典树模板题,01字典树在求解异或问题上十分高效.利用给定数据的二进制数 ...

随机推荐

  1. [转帖]SAP一句话入门:Human Resource

    SAP一句话入门:Human Resource http://blog.vsharing.com/MilesForce/A621279.html HR这一句话,太简单了:组织.招聘.发工资.任职.考勤 ...

  2. POJ1108_Split Windows 解题报告

    Split Windows 题目链接:http://poj.org/problem?id=1108 题目大意: 给你一棵二叉树的先序遍历,有三种字符:|.-.A~Z,然后用窗口表示出来,|: 表示将当 ...

  3. K3BOM跳层

    A自制件,B自制件,C外购件 ,结构为A-B-C 如果需要跳层,则设置A-B跳层,B-C跳层,则生成A计划订单,C计划订单, 假设单独A-B跳层,则MRP运算出的结果也是A计划订单,B计划订单,C计划 ...

  4. PermGen space 内存溢出

    1.修改D:\tools\tomcat\tomcat - 7\apache-tomcat-7.0.91\bin tomcat 路径下bin 文件的catalina.bat文件 添加 JAVA_OPTS ...

  5. java学习之—并归排序

    /** * 并归排序 * Create by Administrator * 2018/6/26 0026 * 下午 5:13 **/ public class DArray { private lo ...

  6. java学习之—排序

    package test3; public class Sort{ /** * 冒泡排序 * @param array */ public void bubbleSort(int[] array) { ...

  7. 在eclipse中spring的xml配置文件标签中class路径全限定名自动提示设置

    这个自动提示其实很简单,没有网上说的那些要在help下的Install中输入网址来下载更新一堆东西那么复杂. 只需要打开Help — — >Eclipse Marketplace... 然后在该 ...

  8. Service Account和RBAC授权

    一.介绍 Service Account概念的引入是基于这样的使用场景:运行在pod里的进程需要调用Kubernetes API以及非Kubernetes API的其它服务.Service Accou ...

  9. 用dbExpress页的SQLConnection1连接sql server2000怎么设置。 [问题点数:0分]

    在d7或者c6已经支持了. 贡献一下我的代码吧:dbeConn:= TSQLConnection.Create(nil);       dbeConn.Params.Clear;       dbeC ...

  10. 深度学习中dropout策略的理解

    现在有空整理一下关于深度学习中怎么加入dropout方法来防止测试过程的过拟合现象. 首先了解一下dropout的实现原理: 这些理论的解释在百度上有很多.... 这里重点记录一下怎么实现这一技术 参 ...