其他分享
首页 > 其他分享> > Apollo versus Pan(CF1466E)(位运算)

Apollo versus Pan(CF1466E)(位运算)

作者:互联网

题意:
给定长度为 \(n\) 的序列 \(x\)。

\(\sum^{n}_{i=1} \sum^{n}_{j=1} \sum^{n}_{k=1} (x_{i}\ \& \ x_{j})\times (x_{j}\ |\ x_{k})\text{}\)


想法:


代码:

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int mod=1e9+7;
const int maxn=500005;


ll x[maxn];
ll cnt[105];

int main()
{
    int T,n;
    cin>>T;
    while(T--){
        memset(cnt,0,sizeof cnt);
        scanf("%d",&n);
        for(int i=1;i<=n;i++){
            scanf("%lld",&x[i]);
            for(int j=0;j<=60;j++){
                if((1ll<<j)&x[i])cnt[j]++;
            }
        }
        ll ans=0;
        for(int i=1;i<=n;i++){
            ll base=1;
            ll num1=0,num2=0;
            for(int j=0;j<=60;j++){
                if((1ll<<j)&x[i]){
                    num1=(num1+base*cnt[j]%mod)%mod;
                    num2=(num2+base*n%mod)%mod;
                }else{
                    num2=(num2+base*cnt[j]%mod)%mod;
                }
                base=base*2%mod;
            }
            ans=(ans+num1*num2%mod)%mod;
        }
        cout<<ans<<endl;
    }
    return 0;
}

标签:versus,cnt,int,text,sum,times,Apollo,ll,CF1466E
来源: https://www.cnblogs.com/ha-chuochuo/p/14399181.html