A 大吉大利 位运算
链接:https://ac.nowcoder.com/acm/contest/4853/A
题意:求出每一个数对数列中的任意一个数的位运算和
思路:把每一个数都按位存储计算即可
1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 const int maxn=1e5+10; 5 ll a[maxn]; 6 ll vis[40]; 7 ll sto[40]; 8 void init() 9 { 10 sto[0]=1; 11 for(int i=1;i<=30;i++) 12 sto[i]=sto[i-1]*2; 13 } 14 int main() 15 { 16 init(); 17 int n; 18 scanf("%d",&n); 19 for(int i=1;i<=n;i++){ 20 scanf("%lld",&a[i]); 21 ll tmp=a[i]; 22 for(int j=0;j<=30;j++){ 23 if((a[i]>>j)&1){ 24 vis[j]++; 25 // printf("1 "); 26 } 27 // else printf("0 "); 28 } 29 // printf("\n"); 30 } 31 ll ans=0; 32 for(int i=1;i<=n;i++){ 33 ll tmp=a[i]; 34 for(int j=0;j<=30;j++){ 35 if((a[i]>>j)&1){ 36 ans+=vis[j]*sto[j]; 37 } 38 } 39 } 40 printf("%lld\n",ans); 41 return 0; 42 }