此题在考试时用暴力,暴了30分。

献上30分代码:

  1. #include<stdio.h>
  2. int a[];
  3. int main()
  4. {
  5. int n,t,c,i,max,j,d;
  6. freopen("maximum.in","r",stdin);
  7. freopen("maximum.out","w",stdout);
  8. scanf("%d",&t);
  9. while(t--)
  10. {
  11. max=;
  12. scanf("%d%d",&n,&c);
  13. for(i=;i<=n;i++)
  14. scanf("%d",&a[i]);
  15. if(c==)
  16. {
  17. for(i=;i<=n;i++)
  18. for(j=i+;j<=n;j++)
  19. {
  20. d=a[i]&a[j];
  21. if(d>=max)max=d;
  22. }
  23. }
  24. if(c==)
  25. {
  26. for(i=;i<=n;i++)
  27. for(j=i+;j<=n;j++)
  28. {
  29. d=a[i]^a[j];
  30. if(d>=max)max=d;
  31. }
  32. }
  33. if(c==)
  34. {
  35. for(i=;i<=n;i++)
  36. for(j=i+;j<=n;j++)
  37. {
  38. d=a[i]|a[j];
  39. if(d>=max)max=d;
  40. }
  41. }
  42. printf("%d\n",max);
  43. }
  44. fclose(stdin);
  45. fclose(stdout);
  46. return ;
  47. }

注意与运算符(&),或运算符(|),异或运算符(^)

详细解说:http://www.cnblogs.com/wisdom-jie/p/7732940.html

正解

1、0-1字典树: 
这里其实是就是二叉树,之所以叫做字典树是因为我们的算法把一个数当成了一个31位的字符串来看,比如1就是三十个零外加一个一,这一部分还是比较简单的。 
2、贪心找最大异或值: 
异或运算有一个性质,就是对应位不一样为1,我们要让结果最大化,就要让越高的位置为1。我们找跟一个数的异或结果最大的数,就从树的根结点(最高位)开始找,如果对应位置这个数是0,优先去找那一位为1的数,找不到才去找0;如果对应位置这个数是1,优先去找那一位为0的数,找不到才去找0;最终找到的数就是跟这个数异或结果最大的数。n个数,每个数找一个这样的数并算出结果求其中的最大值,可以得到答案。

参考代码如下:

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <algorithm>
  4. using namespace std;
  5. int n,a[],tmp[];
  6. struct node
  7. {
  8. int val;
  9. node *left, *right;
  10. node(int value=-)
  11. {
  12. val = value;
  13. left = right = NULL;
  14. }
  15. };
  16. node *head = NULL;
  17. void cal(int num)
  18. {
  19. memset(tmp,,sizeof(tmp));
  20. int cnt=;
  21. while(num)
  22. {
  23. tmp[cnt++]=num%;
  24. num/=;
  25. }
  26. for(int i=;i<;i++)
  27. swap(tmp[i],tmp[-i]);
  28. }
  29. void insert(node* &head, int index, int &num)
  30. {
  31. if(index+==)
  32. {
  33. head->val = num;
  34. return;
  35. }
  36. if(tmp[index+]== && !head->left)
  37. head->left = new node(-);
  38. if(tmp[index+]== && !head->right)
  39. head->right = new node(-);
  40. if(tmp[index+]==)
  41. insert(head->left,index+,num);
  42. if(tmp[index+]==)
  43. insert(head->right,index+,num);
  44. }
  45. int dfs(node* &head,int index)
  46. {
  47. if(index+==)
  48. return head->val;
  49. if(tmp[index+]==)
  50. {
  51. if(head->right)
  52. {
  53. return dfs(head->right,index+);
  54. }
  55. else
  56. {
  57. return dfs(head->left,index+);
  58. }
  59. }
  60. else
  61. {
  62. if(head->left)
  63. {
  64. return dfs(head->left,index+);
  65. }
  66. else
  67. {
  68. return dfs(head->right,index+);
  69. }
  70. }
  71. }
  72. int main()
  73. {
  74. while(scanf("%d",&n))
  75. {
  76. for(int i=;i<n;i++)
  77. scanf("%d",&a[i]);
  78. head = new node(-);
  79. for(int i=;i<n;i++)
  80. {
  81. cal(a[i]);
  82. insert(head,-,a[i]);
  83. }
  84. int ans=;
  85. for(int i=;i<n;i++)
  86. {
  87. cal(a[i]);
  88. ans = max(ans, a[i]^dfs(head,-));
  89. }
  90. printf("%d\n",ans);
  91. }
  92. return ;
  93. }

[模拟赛]异或最大值 maxinum的更多相关文章

  1. 2013级新生程序设计基础竞赛-正式赛 F 异或最大值 解题报告

    F - 异或最大值 Time Limit: 2000/1000MS (Java/Others)      Memory Limit: 128000/64000KB (Java/Others) Subm ...

  2. NOIP模拟赛 by hzwer

    2015年10月04日NOIP模拟赛 by hzwer    (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...

  3. BZOJ2741: 【FOTILE模拟赛】L

    2741: [FOTILE模拟赛]L Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 1170  Solved: 303[Submit][Status] ...

  4. NOIP模拟赛 17.10.10

    初次见面(firstmeet)[题目背景]雾之湖边,静得可怕.露米娅出神凝望.黑白连衣裙,像极了绽放的墨黑和洁白的莲.身边的雾之湖,倒映着血色天空.酒红的双眸,映照一切.低声浅笑,双臂伸直,她悄无声息 ...

  5. NOIP模拟赛20161022

    NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...

  6. contesthunter暑假NOIP模拟赛第一场题解

    contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...

  7. 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程

    数据 http://files.cnblogs.com/htfy/data.zip 简要题解 桌球碰撞 纯模拟,注意一开始就在袋口和v=0的情况.v和坐标可以是小数.为保险起见最好用extended/ ...

  8. bzoj 2741: 【FOTILE模拟赛】L 分塊+可持久化trie

    2741: [FOTILE模拟赛]L Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 1116  Solved: 292[Submit][Status] ...

  9. 队爷的Au Plan CH Round #59 - OrzCC杯NOIP模拟赛day1

    题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的Au%20Plan 题解:看了题之后觉得肯定是DP ...

随机推荐

  1. uva 12356 Army Buddies 树状数组解法 树状数组求加和恰为k的最小项号 难度:1

    Nlogonia is fighting a ruthless war against the neighboring country of Cubiconia. The Chief General ...

  2. 【后台测试】postman简介

    ◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/6266047.html 在接口测试的过程中,经常拿到一个接口 ...

  3. Git远程操作详解(新手必备)

    Git是目前最流行的版本管理系统,学会Git几乎成了开发者的必备技能. Git有很多优势,其中之一就是远程操作非常简便.本文详细介绍5个Git命令,它们的概念和用法,理解了这些内容,你就会完全掌握Gi ...

  4. Redis数据结构:链表

    链表被广泛用于Redis的各种功能,比如列表键.发布与订阅.慢查询.监视器等. 每个链表节点由一个listNode结构表示,每个节点都有前置节点和后置节点. 每个链表使用一个list结构来表示,这个结 ...

  5. 老鼠走迷宫(2)输出所有路径(C语言)

    需求 有一个迷宫,在迷宫的某个出口放着一块奶酪.将一只老鼠由某个入口处放进去,它必须穿过迷宫,找到奶酪.请找出它的行走路径. STEP 1 题目转化 我们用一个二维数组来表示迷宫,用2表示迷宫的墙壁, ...

  6. APUE学习笔记——10.11~10.13 信号集、信号屏蔽字、未决信号

    如有转载,请注明出处:Windeal专栏 首先简述下几个概念的关系: 我们通过信号集建立信号屏蔽字,使得信号发生阻塞,被阻塞的信号即未决信号. 信号集: 信号集:其实就是一系列的信号.用sigset_ ...

  7. Linux驱动入门——构建和运行模块

    Hello world模块 本文介绍如何向内核中添加一个hello模块.该模块的功能是在模块加载时,向系统日志输出"hello world\n" 在模块卸载时输出"Goo ...

  8. [置顶] JVM层对jar包字节码加密

    github https://github.com/sea-boat/ByteCodeEncrypt 需求 拿到的需求是要对某特定的jar包实现加密保护,jar包需要提供给外部使用,但核心逻辑部分需要 ...

  9. EasyPlayer RTSP Windows(with ActiveX/OCX插件)播放器支持H.265播放与抓图功能

    EasyPlayer作为业界一款比较优秀的RTSP播放器,一直深受用户的好评,经过了近3年的开发和迭代,从一开始的简单PC版本的RTSP播放功能,到如今支持PC(支持ocx插件).Android.iO ...

  10. angularjs 阻止浏览器自带的回退

    $scope.$on('$locationChangeStart', function(e) { if(!tfOrder && comm.getStorage('orederlistL ...