1 条题解

  • 0
    @ 2025-9-10 0:00:15

    C :

    #include<stdio.h>
    int n,x;
    long long sum,ans=0,a[20];
    int main()
    {
    	scanf("%d",&n);
    	for(int i=1;i<=n;i++)
    	{
    		scanf("%d",&x);
    		for(int j=1;x;x>>=1,j++) if(x&1) a[j]++;
    	}
    	for(int i=1,j=1;i<=15;i++,j<<=1) ans+=(a[i]*(a[i]-1)+((a[i]*(n-a[i]))<<1))*j; 
    	printf("%lld",ans);
    }
    

    C++ :

    #include<iostream>
    #include<cstdio>
    using namespace std;
    long long shu[20]={0},zui=0,zhi,k,i,l,n,p;//15次方最多 
    int main()
    {
    	scanf("%lld",&n);
    	for(i=1;i<=n;i++)
    	{
    		scanf("%lld",&zhi);
    		l=1;
    		while(zhi)
    		{
    			if(zhi&1)shu[l]++;
    			zhi>>=1;
    			l++;
    		}
    	}
    	l=1;
    	for(i=1;i<=15;i++)
    	{
    		zhi=((shu[i]*(shu[i]-1))>>1);
    		zhi*=l;zui+=zhi;
    		zhi=((shu[i]*(shu[i]+1))>>1);
    		zhi=n*shu[i]-zhi;
    		zhi*=l;zui+=zhi;
    		zhi=shu[i]*(n-shu[i]);
    		zhi*=l;zui+=zhi;
    		l<<=1;
    	}
    	printf("%lld\n",zui);
    	return 0;
    }
    
    • 1

    信息

    ID
    2486
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者