[LMXOI Round 1] Size 题解
题意
给出一个长度为
其中定义
我们发现当确定了
我们用
Code
#include<bits/stdc++.h>
using namespace std;
const int N=5e7+5;
template<typename T>inline void read(T &x){
x=0;int f=1;char c=getchar();
while(!isdigit(c)){if(c=='-')f=-1;c=getchar();}
while(isdigit(c)) x=(x<<1)+(x<<3)+(c^48),c=getchar();
x*=f;
}
int n,cnt[N],d,a[N],len;
long long ans;
inline int calc(int x){
int res=0;
while(x) ++res,x-=x&-x;
return res;
}
int main(){
read(n);
while(n--){
read(d);
if(cnt[d]++==0) a[++len]=d;
}
for(int i=1;i<=len;++i)
for(int j=1;j<=len;++j)
ans+=1ll*cnt[a[i]]*cnt[a[j]]*(calc(a[i]+a[j])+calc(abs(a[i]-a[j])));
printf("%lld",ans);
return 0;
}