• Atcoder Beginner Contest 147D(按位处理)


    把每个数字每一位上二进制数字取出,求答案时直接用N个数里这一位是0的个数乘上这一位是1的个数然后乘上二的这一位次方,注意所有可能溢出的地方都要对mod取模。

     1 #define HAVE_STRUCT_TIMESPEC
     2 #include<bits/stdc++.h>
     3 using namespace std;
     4 long long a[300007];
     5 int num[300007][67];
     6 long long sum0[67],sum1[67],presolve[67];
     7 const long long mod = 1e9+7;
     8 int main(){
     9     ios::sync_with_stdio(false);
    10     cin.tie(NULL);
    11     cout.tie(NULL);
    12     int n;
    13     cin>>n;
    14     for(int i=1;i<=n;++i)
    15         cin>>a[i];
    16     for(int i=1;i<=n;++i){
    17         long long temp=a[i];
    18         int cnt=0;
    19         while(temp){
    20             if(temp&1)
    21                 num[i][cnt]=1;
    22             ++cnt;
    23             temp/=2;
    24         }
    25     }
    26     long long ans=0;
    27     for(int i=1;i<=n;++i){
    28         for(int k=0;k<=60;++k){
    29             if(num[i][k]==0)
    30                 ++sum0[k];
    31             else
    32                 ++sum1[k];
    33         }
    34     }
    35     long long x=1;
    36     presolve[0]=1;
    37     for(int i=1;i<=60;++i){
    38         x*=2;
    39         presolve[i]=x;
    40     }
    41     for(int i=0;i<=60;++i){
    42         ans+=(((sum0[i]*sum1[i])%mod)*(presolve[i]%mod))%mod;
    43         ans%=mod;
    44     }
    45     cout<<ans;
    46     return 0;
    47 }
    保持热爱 不懈努力 不试试看怎么知道会失败呢(划掉) 世上无难事 只要肯放弃(划掉)
  • 相关阅读:
    解决deepin没有ll等命令的办法
    解决客户端Redis中文乱码问题
    Redis 常用命令操作
    Redis常用数据类型
    Redis 入门
    Ubuntu18.04 安装netstat
    Ubuntu18.04 安装redis
    常用sql:按照表中的某一列对数据进行分组,统计数据条数
    date( ) 日期函数
    tp5 apache 转 nginx 需要配置的伪静态
  • 原文地址:https://www.cnblogs.com/ldudxy/p/12076864.html
Copyright © 2020-2023  润新知