题目描述
有 NN 种食材,编号从 00 至 N−1N−1,其中第 ii 种食材的美味度为 aiai。
不同食材之间的组合可能产生奇妙的化学反应。具体来说,如果两种食材的美味度分别为 xx 和 yy ,那么它们的契合度为 x and yx and y。
其中,anf 运算为按位与运算,需要先将两个运算数转换为二进制,然后在高位补足 ,再逐位进行与运算。例如,1212 与 66 的二进制表示分别为 11001100 和 01100110 ,将它们逐位进行与运算,得到 01000100 ,转换为十进制得到 4,因此 12and6=4。在 C++ 或 Python 中,可以直接使用 &
运算符表示与运算。
现在,请你找到契合度最高的两种食材,并输出它们的契合度。
输入格式
第一行一个整数 NN,表示食材的种数。
接下来一行 NN 个用空格隔开的整数,依次为 a1,⋯ ,aNa1,⋯,aN,表示各种食材的美味度。
输出格式
输出一行一个整数,表示最高的契合度。
输入输出样例
输入 #1
3 1 2 3
输出 #1
2
输入 #2
5 5 6 2 10 13
输出 #2
8
说明/提示
样例解释 1
可以编号为 1,21,2 的食材之间的契合度为 2 and 3=22 and 3=2,是所有食材两两之间最高的契合度。
样例解释 2
可以编号为 3,4的食材之间的契合度为 10 and 13=810 and 13=8,是所有食材两两之间最高的契合度。
数据范围
对于 40% 的测试点,保证 N≤1,000;
对于所有测试点,保证 N≤106,0≤ai≤2,147,483,647
code
#include<bits/stdc++.h>
using namespace std;
void read(int& a){
int s = 0, w = 1;
char ch = getchar();
while (ch < '0' || ch>'9'){
if (ch == '-')
w = -1;
ch = getchar();
}
while (ch >= '0' && ch <= '9'){
s = s * 10 + ch - '0';
ch = getchar();
}
a = s * w;
}
bool cmp(int a,int b){
return a>b;
}
int main(){
int n;
cin>>n;
int a[n+1];
int maxn=-100;
for( int i=0;i<n;i++ )read(a[i]);
sort(a,a+n,cmp);
n=min(n,32);
for( int i=0;i<n;i++ ){
for( int j=0;j<n,i!=j;j++ ){
int sum=a[j]&a[i];
// if( i!=j ){
maxn=max(maxn,sum);
// }
}
}
cout<<maxn;
return 0;
}