NC204017. 大吉大利
描述
输入描述
第一行一个整数.第二行个整数.
输出描述
一个整数表示上述求和式的答案.
示例1
输入:
5 1 2 3 4 5
输出:
33
C(clang 3.9) 解法, 执行用时: 23ms, 内存消耗: 1104K, 提交时间: 2020-04-01 20:42:51
#include<stdio.h> main() { int n,i,j,num=0; scanf("%d",&n); long long sum=0; long long a[n]; for(i=0;i<n;i++)scanf("%lld",&a[i]); for(j=0;j<=31;j++) { num=0; for(i=0;i<n;i++) { if(a[i]&(1<<j))num++; } sum+=1ll*num*num*(1<<j); } printf("%lld",sum); }
C++11(clang++ 3.9) 解法, 执行用时: 23ms, 内存消耗: 616K, 提交时间: 2020-03-27 22:59:30
#include<bits/stdc++.h> using namespace std; long long a[30],x,n,z; int main(){ scanf("%lld",&n); for(int i=1;i<=n;i++){ scanf("%lld",&x); for(int j=0;j<30;a[j++]+=(x>>j)%2);//找出贡献数 } for(int i=0;i<30;i++){ z+=(a[i]*a[i])<<i; }printf("%lld\n",z); }
Python3(3.5.2) 解法, 执行用时: 668ms, 内存消耗: 14348K, 提交时间: 2020-03-27 19:05:42
N = int(input()) arr = list(map(int, input().split())) ans = 0 for i in range(0, 31): cnt = 0 for e in arr: if e & (1 << i): cnt += 1 ans += cnt * cnt * (1 << i) print(ans)