此题在考试时用暴力,暴了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. opencv:图像的基本变换

    0.概述 图像变换的基本原理都是找到原图和目标图的像素位置的映射关系,这个可以用坐标系来思考,在opencv中, 图像的坐标系是从左上角开始(0,0),向右是x增加方向(cols),向下时y增加方向( ...

  2. MVC DateTime 字段 EditTime 必须是日期模板只能用于字段访问、属性访问、一维数组索引或单参数自定义索引器表达式

    ASP.NET MVC 中model含有DateTime类型的字段 更新字段时提示:字段 EditTime必须是日期,. 但是明明填入的是日期还是给出这个提示, 看有的博客说那是因为日期形式错了,如果 ...

  3. 【javascript基础】 JavaScript defer和async区别

    defer该属性用来通知浏览器,这段脚本代码将不会产生任何文档内容.例如 JavaScript代码中的document.write()方法将不会骑作用,浏览器遇到这样的代码将会忽略,并继续执行后面的代 ...

  4. Flask项目中数据库迁移的使用

    数据库迁移 在开发过程中,需要修改数据库模型,而且还要在修改之后更新数据库.最直接的方式就是删除旧表,但这样会丢失数据. 更好的解决办法是使用数据库迁移框架,它可以追踪数据库模式的变化,然后把变动应用 ...

  5. String,StringBuffer和StringBuilder比较

    String:查看源码得知,String类的声明是:public final,所以可以很清楚的知道,fianl的话是改变不了的,所以,如果我们用String来操作字符串的时候,一旦我们字符串的值改变, ...

  6. Caused by: java.lang.AbstractMethodError: org.hibernate.validator.internal.engine.ConfigurationImpl

    1.错误描述 严重: StandardWrapper.Throwable org.springframework.beans.factory.BeanCreationException: Error ...

  7. k近邻法( k-nearnest neighbor)

    基本思想: 给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最邻近的k个实例,这k个实例的多数属于某个类,就把该输入实例分为这个类 距离度量: 特征空间中两个实例点的距离是两个实例点相似 ...

  8. 自己总结 C++ 代码规范

    .编写原则,代码尽量简单,简洁,高效,自己写的代码让自己和别人容易看懂 .命名: a. 类的成员变量加前缀 m_(表示 member). 常量全用大写的字母,用下划线分割单词(;) 循环变量和简单变量 ...

  9. 关于Instruments-Leaks工具的归纳总结

    前言: 本篇文章,在于学习,我把别人的一些感觉好的文章汇总成了一篇,亲自实现了一下,留用于今后学习资料. 文章脉络: 文章脉络: 一.内存优化 简介:Objective_C 有3种内存管理方法, 它们 ...

  10. emacs编辑器的使用

    尽管有许多ide,但是,各种软件使用各种不同,设置等,受不了.觉得应该有一手好的编辑器就可以了.尤其是受不了ide什么lib,.h,exe,dll等路径设置,让人心烦.再加上黑盒子的感觉很不爽.一旦出 ...