【NOIP模拟题】“与”(位运算)
因为是与运算,所以我们可以贪心地每次找最高位的,将他们加入到新的序列中,然后每一次在这个新的序列继续找下一个位。
然后最后序列中任意两个的与运算的值都是一样的且是最大的。
#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模拟题】“与”(位运算)相关推荐
- 闵梓轩大佬のnoip模拟题D1 总结 2017/10/26
背景 题目概括 T1 题面 分析 90分算法 满分算法 T2 题面 分析 部分分算法 满分算法 满分代码 T3 题面 分析 代码 总结 背景 这道题目是去年的金牌大佬闵梓轩在一年前出的一套noip模拟 ...
- HYSBZ(BZOJ) 4300 绝世好题(位运算,递推)
HYSBZ(BZOJ) 4300 绝世好题(位运算,递推) Description 给定一个长度为n的数列ai,求ai的子序列bi的最长长度,满足bi&bi-1!=0(2<=i<= ...
- 算法题_位运算_4_是不是2的整数次方
位运算 是不是2的整数次方 如果已经吃透了上一道题<二进制数中"1"比特的个数>,只要稍加思考,就会发现这道题与上一道的考点是一样的,都是判断"1" ...
- 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= ...
- NOIp模拟题 之 肮脏的牧师 (桶排序)
闲话: 考场上看到了这一题,简直令我震惊!啊!居然还有真么简单的模拟题!良心啊! 而且,还是我 痴迷的 熟悉的游戏 -- 欧气传说 炉石传说! (话说题面的那三张卡都贼 恶心 好用!都可以在前期打出 ...
- 算法题_位运算_9_出现一次的数字和出现k次的数字
位运算 出现一次的数字和出现k次的数字 题目:出现k次和出现1次 描述:数组中只有一个数出现了1次,其他的数都出现了k次,请输出只出现1次的数. 第一次看到这道题,思考了一会,觉得可以使用Map集合来 ...
- 一些noip模拟题一句话题解
Problem A: 序列 Time Limit: 10 Sec Memory Limit: 256 MB Submit: 12 Solved: 9 [Submit][Status][Web Bo ...
- 力扣刷题记录--位运算问题
这里写目录标题 一.n&(n-1) 1. 求一个数的二进制表示中的1的个数 力扣 191. 位1的个数 AcWing 801. 二进制中1的个数 2. 判断一个数是否是2的方幂 二.n& ...
- 【codevs2343】简单题【位运算】【卡常大法好】
这道题的题意十分浅显易懂. 有一串很长很长不知道有多长(最长十万)的01序列,一开始全是0. 要你维护两种操作:将一个区间内的数翻转(就是1变0,0变1,就是异或1).询问某一位是0还是1. 树状数组 ...
最新文章
- 记一次shell脚本推后台stopped的问题
- 数据项目总结:王者荣耀总决赛预测!
- 阿里云ESC搭建SVN服务端
- 如果看了这篇文章你还不懂傅里叶变换,那就过来掐死我吧(一)
- 编译乱序(Compiler Reordering)
- 【企业管理】整理和思考-陈春花:2022年经营关键词
- python-模块入门二(模块循环导入,区分python文件的两种用途,模块搜索路径,软件开发的目录规范)...
- 金融学习纲要与相关知识
- 微软发文庆祝 .NET 诞生 20 周年纪念日!
- 软链接与硬链接的区别;描述通配符与正则表达式的区别
- springboot+mybatis+mysql(增删改查xml入门编程)
- 深耕小而美的领域,也能过好一生
- Java_Dubbo视频教程-雷丰阳-专题视频课程
- Intellij IDEA安卓开发环境的搭建
- RGB888颜色码与十六位(RGB565)颜色码的转换
- 九九乘法表的四种打印模式
- 如何给Word参考文献加方括号
- UVA_12676_Inverting Huffman(哈夫曼树)
- GC详解---JVM(三)
- Scrapy去重操作