[模拟赛]异或最大值 maxinum
此题在考试时用暴力,暴了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的更多相关文章
- 2013级新生程序设计基础竞赛-正式赛 F 异或最大值 解题报告
F - 异或最大值 Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others) Subm ...
- NOIP模拟赛 by hzwer
2015年10月04日NOIP模拟赛 by hzwer (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...
- BZOJ2741: 【FOTILE模拟赛】L
2741: [FOTILE模拟赛]L Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 1170 Solved: 303[Submit][Status] ...
- NOIP模拟赛 17.10.10
初次见面(firstmeet)[题目背景]雾之湖边,静得可怕.露米娅出神凝望.黑白连衣裙,像极了绽放的墨黑和洁白的莲.身边的雾之湖,倒映着血色天空.酒红的双眸,映照一切.低声浅笑,双臂伸直,她悄无声息 ...
- NOIP模拟赛20161022
NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...
- contesthunter暑假NOIP模拟赛第一场题解
contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...
- 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程
数据 http://files.cnblogs.com/htfy/data.zip 简要题解 桌球碰撞 纯模拟,注意一开始就在袋口和v=0的情况.v和坐标可以是小数.为保险起见最好用extended/ ...
- bzoj 2741: 【FOTILE模拟赛】L 分塊+可持久化trie
2741: [FOTILE模拟赛]L Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 1116 Solved: 292[Submit][Status] ...
- 队爷的Au Plan CH Round #59 - OrzCC杯NOIP模拟赛day1
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的Au%20Plan 题解:看了题之后觉得肯定是DP ...
随机推荐
- yyyy-MM-dd EEE hh:mm:ss(日期转换)
<script> /** * 对Date的扩展,将 Date 转化为指定格式的String * 月(M).日(d).12小时(h).24小时(H).分(m).秒(s).周(E).季度(q) ...
- hdu 2818 Building Block(并查集,有点点复杂)
Building Block Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- Markdown_04_折叠语法
目录 一.折叠语法 参考资料 一.折叠语法 主要使用的是 html5的 details标签 (1)示例如下: <details> <summary>折叠文本</summa ...
- Vundle简介安装
body, table{font-family: 微软雅黑} table{border-collapse: collapse; border: solid gray; border-width: 2p ...
- 【WebGL】3. 相机
相机的种类:WebGL中的相机有两种:正投影相机和透视相机 1. 正投影相机OrthographicCamera:类似于工程图纸中的视角,忽略远近距离,远近的物体比例不变,多用于科学研究,工程图纸的应 ...
- Linux环境安装xmapp(PHP-Mysql集成环境)
xmapp是很多初学者使用的PHP环境集成包,用yum在linux安装的php和mysql版本现在都很低,xmapp可以解决这个问题,下面我们直接进入正题,安装一个php集成环境. 我使用的是vm虚拟 ...
- yii2 联系我们发送邮件报错
为什么会报错,因为国内的邮件服务商要求发送邮件的人和设置的smtp服务器账号要相同,因为联系我们的是用户,也就是发件人是用户,而不是我们配置的邮箱,所有出错. 这里我用了个取巧的办法,发件人改为自己, ...
- d3.js(v5.7)的比例尺以及坐标轴
直接上代码了,这里的一些函数用的是之前我自己封装的函数(包括attr的obj支持和节点数量和数据数量的自动匹配),若有不明白的,可以查看之前的博客: 页面的效果如下: 接下来继续添加坐标轴: 最终:
- [Scala]Scala学习笔记六 文件
1. 读取行 读取文件,可以使用scala.io.Source对象的fromFile方法.如果读取所有行可以使用getLines方法: val source = Source.fromFile(&qu ...
- Unity遍历资源下的所有文件以及子文件
笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D实战核心技术详解 ...