牛客练习赛60--A 大吉大利(数论)

牛客练习赛60--A 大吉大利(数论)_第1张图片

题意:

题意就是给定一些数,求他们互相&的和

比如样例分析a1,a2,a3,a4,a5

ans=a1&a1+a1&a2+a1&a3+a1&a4+a1&a5+a2&a1+a2&a2+a2&a3+a2&a4+a2&a5+......+a5&a1+...+a5&a5

由于0&任何数=0,所以将a1,a2...an的每一位的1的总数用一个数组sum记录起来,然后将a1~an的每一位依次与sum的每一个相与的结果相加,即得到结果。

注意:

为了防止结果溢出,用1LL*结果。

ACcode:

#include 
using namespace std;
const int maxn=1e5+10;
int s[maxn];
int sum[250];
long long ann(int a)
{
	long long ans=0;
	long long now=0;
	while(a)
	{
		if(a&1)
		{
			ans+=1LL*(1<>=1;
	}
	return ans;
}
int main()
{
	int n;
	cin >> n;
	long long ans=0;
	for(int i=0;i> s[i];
		int cnt=0;
		int m=s[i];
		while(m)
		{
			if(m&1)
			{
				sum[cnt]++;
			}
			m/=2;
			cnt++;
		}
	}
	for(int i=0;i

 

你可能感兴趣的:(数论)