题目链接: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. 【翻译】asp.net core2.1认证和授权解密

    asp.net core2.1认证和授权解密 本篇文章翻译自:https://digitalmccullough.com/posts/aspnetcore-auth-system-demystifie ...

  2. Azure系列2.1.13 —— CloudBlockBlob

    (小弟自学Azure,文中有不正确之处,请路过各位大神指正.) 网上azure的资料较少,尤其是API,全是英文的,中文资料更是少之又少.这次由于公司项目需要使用Azure,所以对Azure的一些学习 ...

  3. Mybatis+Spring整合后Mapper测试类编写

    public class UserMapperTest { private ApplicationContext applicationContext; @Before public void ini ...

  4. 剑指offer(7)

    今天的几道题目都是关于斐波那契数列的. 题目1: 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0). n<=39 传统的方法采用递归函数,这种 ...

  5. 销售合同金额数据从Excel导入

    一.业务需求 1.新增了销售合同金额的字段,但是老数据没有这个字段:所以销售合同金额从销售合同附件的各品种金额之和. 2.制作好excel字段模板,将此模板发送给销售业务部门来统计并完成excel表格 ...

  6. java静态工厂

    本文摘自:https://www.jianshu.com/p/ceb5ec8f1174 本文略长,所以先来个内容提要 序:什么是静态工厂方法 Effective Java 2.1 静态工厂方法与构造器 ...

  7. php1

    正则表达式 $p = '/name:(\w+\s?\w+)/'; $str = "name:steven jobs"; preg_match($p, $str, $match); ...

  8. 我对领域驱动设计(DDD)的学习成果

    领域驱动设计之领域模型 2004年Eric Evans发表Domain-Driven Design – Tackling Complexity in the Heart of Software (领域 ...

  9. ElasticSearch查询 第四篇:匹配查询(Match)

    <ElasticSearch查询>目录导航: ElasticSearch查询 第一篇:搜索API ElasticSearch查询 第二篇:文档更新 ElasticSearch查询 第三篇: ...

  10. 第五十五天 css基础入门

    一.引入css的三种方式 1.行间式 <div style="width: 100px; height: 100px; background-color: red">& ...