(我可能已经染上异或恐惧症了…)
克服恐惧的最好方式就是…奥利给!
巨水的一道题…做不出来的唯一原因是卡在更神(sha)奇(que)的F题了,
初见直接拿出准备良久的生成树板子正准备撸树呢,突然发现边有点多…(人都吓傻了) 又因为卡F卡的心态爆炸,就扔了… (赤裸裸的找借口)
因为对位运算掌握的不好,所以没有办法像题解那样写出(n+logv)的算法…(QWQ)
上代码:
#include <iostream>
#include <algorithm>
#define MAX 100010
#define ll long long
using namespace std;
ll a[MAX];
ll k[MAX];
int len=0;
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++)
cin>>a[i];
sort(a,a+n);
for(int i=0;i<n;i++)
{
if(i==0||a[i]!=a[i-1])
k[len++]=a[i];
}
ll ans;
for(int i=0;i<=31;i++)
{
int f0=0,f1=0;
for(int j=0;j<len;j++)
{
if((k[j]&(1<<i))==0)
{
f0=1;
}
else
f1=1;
}
if(f0&&f1)
{
ans=i;
break;
}
}
cout<<1ll*(1ll<<ans)*1ll*(len-1);
return 0;
}
扔个官方题解: