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

献上30分代码:

#include<stdio.h>
int a[];
int main()
{
int n,t,c,i,max,j,d;
freopen("maximum.in","r",stdin);
freopen("maximum.out","w",stdout);
scanf("%d",&t);
while(t--)
{
max=;
scanf("%d%d",&n,&c);
for(i=;i<=n;i++)
scanf("%d",&a[i]);
if(c==)
{
for(i=;i<=n;i++)
for(j=i+;j<=n;j++)
{
d=a[i]&a[j];
if(d>=max)max=d;
}
}
if(c==)
{
for(i=;i<=n;i++)
for(j=i+;j<=n;j++)
{
d=a[i]^a[j];
if(d>=max)max=d;
}
}
if(c==)
{
for(i=;i<=n;i++)
for(j=i+;j<=n;j++)
{
d=a[i]|a[j];
if(d>=max)max=d;
}
}
printf("%d\n",max);
}
fclose(stdin);
fclose(stdout);
return ;
}

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

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

正解

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

参考代码如下:

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int n,a[],tmp[];
struct node
{
int val;
node *left, *right;
node(int value=-)
{
val = value;
left = right = NULL;
}
};
node *head = NULL;
void cal(int num)
{
memset(tmp,,sizeof(tmp));
int cnt=;
while(num)
{
tmp[cnt++]=num%;
num/=;
}
for(int i=;i<;i++)
swap(tmp[i],tmp[-i]);
}
void insert(node* &head, int index, int &num)
{
if(index+==)
{
head->val = num;
return;
}
if(tmp[index+]== && !head->left)
head->left = new node(-);
if(tmp[index+]== && !head->right)
head->right = new node(-);
if(tmp[index+]==)
insert(head->left,index+,num);
if(tmp[index+]==)
insert(head->right,index+,num);
}
int dfs(node* &head,int index)
{
if(index+==)
return head->val;
if(tmp[index+]==)
{
if(head->right)
{
return dfs(head->right,index+);
}
else
{
return dfs(head->left,index+);
}
}
else
{
if(head->left)
{
return dfs(head->left,index+);
}
else
{
return dfs(head->right,index+);
}
}
}
int main()
{
while(scanf("%d",&n))
{
for(int i=;i<n;i++)
scanf("%d",&a[i]);
head = new node(-);
for(int i=;i<n;i++)
{
cal(a[i]);
insert(head,-,a[i]);
}
int ans=;
for(int i=;i<n;i++)
{
cal(a[i]);
ans = max(ans, a[i]^dfs(head,-));
}
printf("%d\n",ans);
}
return ;
}

[模拟赛]异或最大值 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. webstrom 配置eslint 自动修复错误

    1.展示效果 如何给vue项目添加eslint呢,如何自动修复呢? 先展示一下效果: 2.配置步骤 1.安装插件ESLint plugin webstrom 其实有个非常好用的插件,ESLint pl ...

  2. 027——VUE中事件修饰符:stop prevent self capture

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. Java复习5.面向对象

    Java 复习5面向对象知识 20131004 前言: 前几天整理了C++中的面向对象的知识,学习Java语言,当然最重要的就是面向对象的知识,因为可以说Java是最正宗的面向对象语言,相比C++,更 ...

  4. Winform 导航菜单的方法

    http://blog.163.com/kunkun0921@126/blog/static/169204332201171610619611/ 第一种:使用OutlookBar第三方控件 第二种:使 ...

  5. Python3的基础语法(四)

    1,编码 默认情况下,Python 3 源码文件以 UTF-8 编码,所有字符串都是 unicode 字符串. 当然你也可以为源码文件指定不同的编码: # -*- coding: cp-1252 -* ...

  6. Linux下常用压缩、解压缩命令

    常用的压缩工具 一是单纯的单文件压缩工具,主要有compress,gzip,bzip2. 二是打包压缩工具,也是最常用的,tar 压缩比:compress<gzip<bzip2    co ...

  7. c++多线程在异常环境下的等待

    c++11开始支持多线程编程,相关的类和函数封装在标准库头文件<thread>中,而c++多线程编程很重要的一点就是当用户创建一个std::thread对象,关联了可调用对象后,需要在该t ...

  8. 《Drools7.0.0.Final规则引擎教程》第4章 4.4 约束(Pattern的一部分)

    4.4.3 约束(Pattern的一部分) 前面我们已经介绍了条件约束在Pattern中位置了,那么什么是条件约束呢?简单来说就是一个返回true或者false的表达式,比如下面的5小于6,就是一个约 ...

  9. C++ 回调函数的几种策略

    Stackoverflow中提出了这样一个问题:假设我们实现了一个User类,Library类,现在Library类中utility需要回调User中func方法,总结答案,常见的几种方法如下: 静态 ...

  10. JSON简介[转]

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. 易于人阅读和编写.同时也易于机器解析和生成. 它基于JavaScript Programming Lan ...