1 solutions
-
0
C :
#include<stdio.h> int n,x; long long sum,ans=0,a[20]; int main() { scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d",&x); for(int j=1;x;x>>=1,j++) if(x&1) a[j]++; } for(int i=1,j=1;i<=15;i++,j<<=1) ans+=(a[i]*(a[i]-1)+((a[i]*(n-a[i]))<<1))*j; printf("%lld",ans); }C++ :
#include<iostream> #include<cstdio> using namespace std; long long shu[20]={0},zui=0,zhi,k,i,l,n,p;//15次方最多 int main() { scanf("%lld",&n); for(i=1;i<=n;i++) { scanf("%lld",&zhi); l=1; while(zhi) { if(zhi&1)shu[l]++; zhi>>=1; l++; } } l=1; for(i=1;i<=15;i++) { zhi=((shu[i]*(shu[i]-1))>>1); zhi*=l;zui+=zhi; zhi=((shu[i]*(shu[i]+1))>>1); zhi=n*shu[i]-zhi; zhi*=l;zui+=zhi; zhi=shu[i]*(n-shu[i]); zhi*=l;zui+=zhi; l<<=1; } printf("%lld\n",zui); return 0; }
- 1
Information
- ID
- 17784
- Time
- 1000ms
- Memory
- 128MiB
- Difficulty
- (None)
- Tags
- # Submissions
- 0
- Accepted
- 0
- Uploaded By