因为是与运算,所以我们可以贪心地每次找最高位的,将他们加入到新的序列中,然后每一次在这个新的序列继续找下一个位。

然后最后序列中任意两个的与运算的值都是一样的且是最大的。

#include <cstdio>
#include <cstring>
#include <cmath>
#include <string>
#include <iostream>
#include <algorithm>
#include <queue>
#include <set>
#include <vector>
#include <map>
using namespace std;
typedef long long ll;
#define pii pair<int, int>
#define mkpii make_pair<int, int>
#define pdi pair<double, int>
#define mkpdi make_pair<double, int>
#define pli pair<ll, int>
#define mkpli make_pair<ll, int>
#define rep(i, n) for(int i=0; i<(n); ++i)
#define for1(i,a,n) for(int i=(a);i<=(n);++i)
#define for2(i,a,n) for(int i=(a);i<(n);++i)
#define for3(i,a,n) for(int i=(a);i>=(n);--i)
#define for4(i,a,n) for(int i=(a);i>(n);--i)
#define CC(i,a) memset(i,a,sizeof(i))
#define read(a) a=getint()
#define print(a) printf("%d", a)
#define dbg(x) cout << (#x) << " = " << (x) << endl
#define error(x) (!(x)?puts("error"):0)
#define printarr2(a, b, c) for1(_, 1, b) { for1(__, 1, c) cout << a[_][__]; cout << endl; }
#define printarr1(a, b) for1(_, 1, b) cout << a[_] << '\t'; cout << endl
inline const ll getint() { ll r=0, k=1; char c=getchar(); for(; c<'0'||c>'9'; c=getchar()) if(c=='-') k=-1; for(; c>='0'&&c<='9'; c=getchar()) r=r*10+c-'0'; return k*r; }
inline const int max(const int &a, const int &b) { return a>b?a:b; }
inline const int min(const int &a, const int &b) { return a<b?a:b; }const int N=3*10e5;
int n, a[N], b[N];int main() {read(n);for1(i, 1, n) read(a[i]);for3(k, 31, 0) {int top=0;for1(i, 1, n) if(a[i]&(1<<k)) b[++top]=a[i];if(top>=2) {for1(i, 1, top) a[i]=b[i];n=top;}}printf("%d\n", a[1]&a[n]);return 0;
}

  


题目描述:

给你一个长度为n的序列A,请你求出一对Ai,Aj(1<=i<j<=n)使Ai“与”Aj最大。

Ps:“与”表示位运算and,在c++中表示为&。

输入描述:

第一行为n。接下来n行,一行一个数字表示Ai。

输出描述:

输出最大的Ai“与”Aj的结果。

样例输入:

3

8

10

2

样例输出:

8

样例解释:

8 and 10 = 8

8 and 2 = 0

10 and 2 = 2

数据范围:

20%的数据保证n<=5000

100%的数据保证 n<=3*10^5,0<=Ai<=10^9

【NOIP模拟题】“与”(位运算)相关推荐

  1. 闵梓轩大佬のnoip模拟题D1 总结 2017/10/26

    背景 题目概括 T1 题面 分析 90分算法 满分算法 T2 题面 分析 部分分算法 满分算法 满分代码 T3 题面 分析 代码 总结 背景 这道题目是去年的金牌大佬闵梓轩在一年前出的一套noip模拟 ...

  2. HYSBZ(BZOJ) 4300 绝世好题(位运算,递推)

    HYSBZ(BZOJ) 4300 绝世好题(位运算,递推) Description 给定一个长度为n的数列ai,求ai的子序列bi的最长长度,满足bi&bi-1!=0(2<=i<= ...

  3. 算法题_位运算_4_是不是2的整数次方

    位运算 是不是2的整数次方 如果已经吃透了上一道题<二进制数中"1"比特的个数>,只要稍加思考,就会发现这道题与上一道的考点是一样的,都是判断"1" ...

  4. LeetCode刷题:位运算(找不同 和 只出现一次的数字)

    1.常见的位运算 按位与&:(1&1=1,1&0=0,0&1=0,0&0=0); 按位或 | : (1 | 1=1,1 | 0=1,0 | 1=1,0 | 0= ...

  5. NOIp模拟题 之 肮脏的牧师 (桶排序)

    闲话: 考场上看到了这一题,简直令我震惊!啊!居然还有真么简单的模拟题!良心啊! 而且,还是我 痴迷的 熟悉的游戏 --  欧气传说 炉石传说! (话说题面的那三张卡都贼 恶心 好用!都可以在前期打出 ...

  6. 算法题_位运算_9_出现一次的数字和出现k次的数字

    位运算 出现一次的数字和出现k次的数字 题目:出现k次和出现1次 描述:数组中只有一个数出现了1次,其他的数都出现了k次,请输出只出现1次的数. 第一次看到这道题,思考了一会,觉得可以使用Map集合来 ...

  7. 一些noip模拟题一句话题解

    Problem A: 序列 Time Limit: 10 Sec  Memory Limit: 256 MB Submit: 12  Solved: 9 [Submit][Status][Web Bo ...

  8. 力扣刷题记录--位运算问题

    这里写目录标题 一.n&(n-1) 1. 求一个数的二进制表示中的1的个数 力扣 191. 位1的个数 AcWing 801. 二进制中1的个数 2. 判断一个数是否是2的方幂 二.n& ...

  9. 【codevs2343】简单题【位运算】【卡常大法好】

    这道题的题意十分浅显易懂. 有一串很长很长不知道有多长(最长十万)的01序列,一开始全是0. 要你维护两种操作:将一个区间内的数翻转(就是1变0,0变1,就是异或1).询问某一位是0还是1. 树状数组 ...

最新文章

  1. 记一次shell脚本推后台stopped的问题
  2. 数据项目总结:王者荣耀总决赛预测!
  3. 阿里云ESC搭建SVN服务端
  4. 如果看了这篇文章你还不懂傅里叶变换,那就过来掐死我吧(一)
  5. 编译乱序(Compiler Reordering)
  6. 【企业管理】整理和思考-陈春花:2022年经营关键词
  7. python-模块入门二(模块循环导入,区分python文件的两种用途,模块搜索路径,软件开发的目录规范)...
  8. 金融学习纲要与相关知识
  9. 微软发文庆祝 .NET 诞生 20 周年纪念日!
  10. 软链接与硬链接的区别;描述通配符与正则表达式的区别
  11. springboot+mybatis+mysql(增删改查xml入门编程)
  12. 深耕小而美的领域,也能过好一生
  13. Java_Dubbo视频教程-雷丰阳-专题视频课程
  14. Intellij IDEA安卓开发环境的搭建
  15. RGB888颜色码与十六位(RGB565)颜色码的转换
  16. 九九乘法表的四种打印模式
  17. 如何给Word参考文献加方括号
  18. UVA_12676_Inverting Huffman(哈夫曼树)
  19. GC详解---JVM(三)
  20. Scrapy去重操作

热门文章

  1. ITK:将itk :: CovariantVectors的点积
  2. VTK:Utilities之Timer
  3. VTK:Filtering之ProgrammableFilter
  4. C语言实现Trie字典树 (附完整源码)
  5. c++中的引用和指针
  6. QT绘制散点图(1)
  7. QT自定义图表上不同元素的外观
  8. C语言程序程序设计—数组
  9. 运用El表达式截取字符串/获取list的长度
  10. Kettle使用_0 Windows下安装图解