此题在考试时用暴力,暴了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. 1.spring cloud eureka server配置

    IDEA版本 2017.2.5 JDK 1.8 红色加粗内容为修改部分 1.创建一个新项目 2.选择eureka依赖 3.版本选择(重要)并且更新依赖 <?xml version="1 ...

  2. centos 7安装jenkins

    1. 安装java yum install java 2. 安装jenkins wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci. ...

  3. SQL SERVER 导入、导出数据到Exce(使用OpenRowset,、OpenDataSource函数)以及访问远程数据库(openrowset/opendatasource/openquery)

    启用Ad Hoc Distributed Queries 在使用openrowset/opendatasource前搜先要启用Ad Hoc Distributed Queries服务,因为这个服务不安 ...

  4. windows 下git 的配置安装与使用

    一.安装GIT(过于简单略过) 二.配置git 二(一).配置git的user name和email 打开 git bash,输入 $ git config --global user.name &q ...

  5. VS2005 使用体验

    鄙人记性真心不好,看了就忘.此文记录下日常小工具的tips. 1)VS的小番茄: 破解版 Visual.Assist.X.V10.6.1833支持VS2010 VS2008 VS2005 VC6 破解 ...

  6. redhat9安装gcc(转)

    原文链接:http://blog.chinaunix.net/uid-20260767-id-118036.html 第一种方法: 相信现在还有不少人在用经典的RedHat9,毕竟他是完全免费的红帽L ...

  7. linux生成随机密码的十种方法

    Linux操作系统的一大优点是对于同样一件事情,你可以使用高达数百种方法来实现它.例如,你可以通过数十种方法来生成随机密码.本文将介绍生成随机密码的十种方法. 1. 使用SHA算法来加密日期,并输出结 ...

  8. Mininet python代码创建拓扑、交互式界面创建主机、交换机

          python代码创建拓扑: from mininet.net importMininet net =Mininet() # Creating nodes in the network. c ...

  9. Microsoft Office Powerpoint、Visio 已停止工作解决办法

    现象:在使用visio的过程中经常会出现“Microsoft office visio已停止工作”只能将visio关闭:windows可以尝试恢复您的信息并重新启动该程序.office的其他组件不会出 ...

  10. Android:数据持久化(1/2)文件、SharedPreferences

    Summary 持久化的3种方法: 普通文件:I/O流操作文件: SharedPreferences:XML文件,通过key-value pair的形式存储数据: SQLite:Android自带数据 ...