[模拟赛]异或最大值 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 ...
随机推荐
- yum 认知及使用
https://www.cnblogs.com/zhichaoma/p/7533247.html
- Js 日期选择,可以的一个页面中重复使用本JS日历,兼容IE及火狐等主流浏览器,而且界面简洁、美观,操作体验也不错。
<html> <head> <title>Js日期选择器并自动加入到输入框中</title> <meta http-equiv="con ...
- ElasticSearch自定义分词器
通过mapping中的映射,将&映射成and PUT /my_index?pretty' -H 'Content-Type: application/json' -d' { "set ...
- windows下gvim搭建IDE
原文转载自:手把手教你把Vim改装成一个IDE编程环境(图文) 如侵犯您的版权,请联系:windeal12@qq.com By: 吴垠 Date: 2007-09-07 Version: 0.5 Em ...
- 【这些年】Linux C/C++软件开发用过的工具
这些年一直从事Linux下C/C++软件开发,学习工作中用到了不少开发工具,一直想做个总结,却总是因为这个原因那个原因,未能动笔.趁今天天气凉爽,空气清新,花点儿功夫,做一个小结啦,防止以 ...
- linux和windows双系统设置默认启动系统
1.以root身份登录linux系统: 2.启动终端,输入命令:vi /boot/grub/grub.conf,文件内容如下: #boot=/dev/sda default=0 (默认启动哪个系统的设 ...
- 解决h5py的FutureWarning问题
h5py/__init__.py:: FutureWarning: Conversion of the second argument of issubdtype from `float` to `n ...
- I.MX6 I2C DS1337 disable square-wave output
linux I2C DS1337 disable square-wave output \\\\\\\\\\\-*- 目录 -*-////////// | 一.DS1337访问寄存器说明: | 二.c ...
- 在CentOS 7上安装GitLab
网上安装gitlab的方法有一堆,由于墙的原因,没有一个能安装成功,最后终于在中文版官网上面找到了RPM包可以下载,进行一键安装: 中文官网地址:http://www.gitlab.cc/ 下载地址为 ...
- 类(Classes)
待写! 这里极力推荐博客园Vamei写的python系列文章,非常精彩,我只是遵照着The Python Tutorial目录来记录自己的学习体会,但也在看Vamei的文章,给大家推荐! 作者:Vam ...