zoukankan      html  css  js  c++  java
  • 异或和之和

    https://ac.nowcoder.com/acm/contest/5600/J

    #include<iostream>
    using namespace std;
    typedef long long ll;
    const ll mod = 1e9+7;
    const int maxn = 2e5+111;
    int n;
    ll k_q(ll a,ll b){
    	ll res = 1;
    	while(b){
    		if(b&1){
    			res = (res*a)%mod;
    		}
    		b>>=1;
    		a = (a*a)%mod;
    	}
    	return res%mod;
    }
    
    ll jc[maxn];
    ll list[maxn];//list[i]是i的阶乘
     
    ll C(ll n,ll m){
    
    	ll ans = (list[n]*((jc[m]*jc[n - m])%mod))%mod;
    	
    	return ans%mod;
    }
    
    ll cnt1[2000];//1
    ll cnt0[2000];
    
    int main(){
    	scanf("%d",&n);
    	list[0] = 1;
    	
    	for(int i=1;i<maxn;i++){
    		list[i] = (1LL*list[i-1] * i)%mod;
    	}
    	for(int i=0;i<maxn;i++){
    		jc[i] = k_q(list[i],mod-2)%mod;
    	}
    	
    	int cns=0;
    	for(int i=0;i<n;i++){
    		ll x;
    		scanf("%lld",&x);
    		for(ll j=0;j<60;j++){
    			int t = (x>>j)&1;
    			if(t) cnt1[j]++;
    			else cnt0[j]++;
    		}
    	}
    	ll sum = 0;
    	ll ans = 0;
    	for(int i=0;i<60;i++){
    		if(cnt1[i] == 0) continue;
    	
    		if(cnt1[i]>=3){
    			ans = (C(cnt1[i],3)*k_q(2,i))%mod;
    			
    			sum = (sum + ans)%mod;
    			
    		}
    		if(cnt0[i] >= 2){
    			
    			ans = (C(cnt0[i],2)*cnt1[i])%mod;
    			
    			ans = (ans*k_q(2,i))%mod;
    			
    			sum = (sum + ans)%mod;
    			
    		}
    	}
    	cout<<sum<<endl;
    	return 0;
    } 
    

      

    寻找真正的热爱
  • 相关阅读:
    Deployment descriptor
    实体、list 、xml之间的转化
    关于C# 汉字转拼音问题
    NPoco学习笔记(1)
    SQL(二)
    SQL(一)
    sobel算子及cvSobel
    图像的平滑处理
    erase的用法
    int main(int argc, char* argv[ ])
  • 原文地址:https://www.cnblogs.com/lesning/p/12925242.html
Copyright © 2011-2022 走看看