一开始排序,相邻的与,取最大值,重判后WA了
1001
0110
0001
按上面的方法是0 正确结果是1
我一开始的想法是正确的,但不会实现;
从大的数到小的数,从最高位看,1的个数大于2,则凡是带1的继续参与运算,不断递归
但不会实现
sum&a[j]保证了都是满足之前条件的参与运算
a[j]&(1<<(i-1))来看最高位是否为1
如果有两个以上的就sum+=1<<(i-1);
代码如下
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int a[1000005];
int main()
{
int n;
scanf("%d",&n);
for(int i=0;i<n;i++) {
scanf("%d",&a[i]);
}
sort(a,a+n);
int sum=0;
for(int i=31;i>=1;i--) {
int x=0;
for(int j=n-1;j>=0;j--) {
if(((sum&a[j])==sum)&&((a[j]&(1<<i-1))!=0)) {
x++;
}
}
if(x>=2) {
sum+=(1<<(i-1));
}
}
printf("%d\n",sum);
}